2011-03-09 14 views
7

Estoy tratando de obtener una lista de todas las identificaciones de objeto en un repositorio de git, usando libgit2. Parece que no puedo encontrar ningún método para esto. ¿Libgit2 tiene un método para obtener todos los ID de objeto (o iterar a través de ellos), o debo leerlos manualmente?¿Cómo recuperar todas las ID de objeto?

+0

No sé libgit2 en absoluto, pero creo que el comando git para la que sería una variante de 'git fsck' así que diría escanear a través de la fuente libgit2 para ver si hay código que haga lo que 'git fsck' hace. – MatrixFrog

Respuesta

7

Lo que está buscando es el revision walking API.

  • Descripción de la característica se puede encontrar here.
  • Un test demostrando estrategias diferentes pueden caminar también le proporcionará algo de ayuda

Editar: Unathread en el libgit2 mailing list se ocupa específicamente de esto.

una respuesta más precisa a partir Vicent Martí (mantenedor libgit2) es

... Basta con pulsar cada cabeza en el andador. No obtendrá ningún commit duplicado.

Todo lo que tiene que hacer es presionar cada rama y etiquetar los oids en el corrector de revisiones para recorrer recursivamente el historial de confirmaciones. Tenga en cuenta que esto no recuperará las confirmaciones pendientes (confirmaciones o cadena de confirmaciones a las que no hace referencia una sucursal ni una etiqueta).

Edición 2: Este comportamiento (similar a git log --all) ha sido exitosamente implemented en libgit2sharp (libgit2 fijaciones .Net).

Datos 3: Una nueva característica se ha fusionado recientemente que permitiría a enumerar todos los los objetos (cometa, árboles, gotas, ...) almacenados en la base de datos de objetos: git_odb_foreach().

Esto estaría más en línea con el escenario git fsck del que hablabaMatrixFrog.

+0

Los dos primeros enlaces en su respuesta son devolver 404. –

+0

@GeorgeEdison Gracias! Esos están arreglados ahora. – nulltoken

Cuestiones relacionadas