Enumere todos los archivos que alguna vez existieron en un repositorio de Git

109

¿Tiene una forma limpia de enumerar todos los archivos que alguna vez existieron en una rama específica?

elmarco
fuente

Respuestas:

136

Esta es una variación simplificada de la solución de Strager :

git log --pretty=format: --name-status | cut -f2- | sort -u

Editar: Gracias a Jakub por enseñarme un poco más en los comentarios, esta versión tiene una canalización más corta y le da a git más oportunidades para hacer las cosas bien.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
fuente
8
@Dustlin: Agregar --diff-filter = Una opción (lista solo los archivos agregados). La versión actual (sin el filtrado de sed, solo archivos agregados) fallará si ha habilitado la detección de cambio de nombre y tiene cambios de nombre en el historial. Creo que puede usar --name-only en lugar de --name-status y eliminar 'cut -f2-' de la canalización.
Jakub Narębski
En uno de mis repositorios, obtengo bastantes líneas duplicadas (incluidas varias líneas en blanco al comienzo de la salida) con el segundo comando que no son engañosas con el primero.
Slipp D. Thompson
Si necesita un poco más de información que el nombre del archivo: $ git log --pretty = formato: "% h% an [% cd]:% s" --name-only | cut -f2- | sort -u | grep Filename.ext
Nitay
3
Nota: --alles algo que necesitará si tiene más de una propina huérfana. Por ejemplo, múltiples historias separadas en un repositorio.
ThorSummoner
2
--diff-filter=Aignora los archivos que se crearon al copiar un archivo ya existente, por lo que agregarlo no siempre es lo que desea.
cmbuckley
13

Esto hace lo correcto para verificar si un nombre de archivo estuvo presente en el repositorio, no solo en la rama actual.

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar
dch
fuente
3

Puedes correr git-log --name-status, lo que se hace eco de algo como:

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <[email protected]>
Date:   Tue Aug 12 13:28:34 2008 -0700

    Added test file.

A       test

Luego extraiga los archivos agregados:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
extraño
fuente
2

Aquí hay dos alias útiles: FindFile ffy FindFilewithCopies ffc:

# Find if one file ever had into repository
ff = "!git log --pretty=format: --name-status --all -M -B | sort -u | grep $1   #"
# The same as above but showing copied files
ffc = "!git log --pretty=format: --name-status --all -C -M -B | sort -u | grep $1 #"

Obtiene información sobre los nombres de los archivos y las operaciones con ellos.

Uso de muestra:

$ git ff create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php

$ git ffc create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
C052    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_11_210246_create_boletin_nosend_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php
Juan Antonio Tubío
fuente