Estoy trabajando con libgit2sharp (un contenedor C# para libgit2) y he tenido problemas porque no tiene mucha de la funcionalidad que estoy esperando (espero poder contribuir con pronto, esto parece ser un proyecto realmente útil)Obtener cambios entre un commit y su padre con libgit2sharp
Lo que estoy tratando de hacer ahora es obtener una lista de los archivos modificados de un compromiso particular y su padre. No intentaré descubrir qué ha cambiado entre una combinación y sus dos padres. Estoy más interesado en compromisos regulares.
Estos chicos (https://github.com/libgit2/libgit2sharp/issues/89) están trabajando en algo similar. Creo que su procedimiento es una buena idea pero estoy un poco débil en mi comprensión de las partes internas de GIT (hay muchas guías en la guía del usuario final de GIT pero no tanto en la estructura interna)
Tengo curiosidad por saber cómo es sí mismo hace un comando "git diff". Supuestamente, GIT no almacena los deltas, sino más bien una versión completa del archivo (si no cambia, solo apunta a un SHA existente. Esta información se puede encontrar en varias fuentes, como aquí http://xentac.net/2012/01/19/the-real-difference-between-git-and-mercurial.html). Esto parece dificultar los cambios entre dos commits (en mi caso, un commit particular y su padre soltero) porque los datos no se almacenan como parte de la confirmación (lo cual es claro si se examina la clase Commit en Commit.cs de libgit2sharp) archivo).
Lo que puedo obtener acceso desde una confirmación es el árbol. ¿Tendría sentido hacer lo siguiente para encontrar esta información:
1) Comience en la confirmación deseada y camine por el árbol y almacene todos los valores SHA en un conjunto.
2) Comience por el padre para la confirmación deseada y camine por su árbol para almacenar todos sus valores blob SHA en otro conjunto.
3) Los SHA para los archivos cambiados serán los archivos que no estén en la intersección de los dos conjuntos.
El problema que veo con este enfoque es que no parece que haya una forma de obtener el nombre de archivo del valor SHA del blob (no veo nada que pueda hacer esto en el archivo Blob.cs de libgit2sharp).
Sé que hay muchas facetas de esta pregunta, pero son parte de este gran objetivo para obtener un dato particular de git.
Gracias.
Tenga en cuenta que el mismo 'Blob' será apuntado a través de su SHA por diferentes' TreeEntries' con diferentes nombres de archivo. Esto sucederá cuando los archivos tengan el mismo contenido exacto. – nulltoken