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?

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

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

3

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

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <your@email.com>
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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.