Averigüe en qué comprometer cada file cambiado al último?

Quiero saber la confirmación cuando cada file en mi repository (o subdirectory de mi repository) fue cambiado más recientemente.

git log -p some_file.txt me mostrará el historial de confirmaciones para un solo file.

Sin embargo, solo quiero el hash de confirmación en el que cambió junto con el nombre del file (idealmente en una línea). Además, quiero hacer esto para un directory de files (o, todo el repository).

Entonces, esencialmente, estoy buscando resultados similares a los siguientes:

 ./file1.txt hash1 ./file2.txt hash1 ./file3.txt hash2 ./file4.txt hash3 ./file5.txt hash2 

donde hash [n] es el hash de la confirmación donde se modificó el file por última vez.

git log --pretty=oneline -p file1.txt pero --pretty fue ignorado en este caso. También quiero include el nombre del file en la salida en lugar del post de confirmación.

Usando algunas secuencias de commands puede usar este command para get el resultado que está buscando:

find . -type f | egrep -v "(git)" | xargs -I {} git log -1 --pretty=format:'%H {}' {}

Encuentra todos los files en tu carpeta, filtra el directory de git y luego llama a git log con el formatting que estás buscando (aunque este tiene el hash primero)

Debido a la forma en que git almacena commits y los files que contienen (un commit contiene un tree que contiene files y otros treees, pero estos son todos los pointers) no hay una reference fácil de un file a los treees que lo contienen, ni de un tree a los otros treees o commit (s) que lo contienen). Como resultado, no hay una manera simple de hacer esto solo en git .

Sin embargo, eso no significa que no se pueda hacer, solo tomará algunas secuencias de commands. Como habrás notado, un enfoque sería simplemente hacer un git log para encontrar el último lugar donde se cambió cada file individual, posiblemente algo como git log -1 --pretty=format:%H -- <filename> . El enfoque opuesto sería usar git ls-tree para get el SHA1 actual para cada file, luego una combinación de git log , git show y git ls-tree para asignar cada file al tree (s) que lo contiene, y luego asignar esos treees vuelven a la confirmación más reciente que los contiene. Sospecho que el primer enfoque será mucho más fácil, aunque el segundo enfoque probablemente tenga un mejor performance si cargas matrices de varios hashes en, por ejemplo, arreglos de Python …