Répertoriez tous les fichiers qui ont jamais existé dans un référentiel Git

109

Avez-vous un moyen propre de répertorier tous les fichiers qui ont déjà existé dans la branche spécifiée?

Elmarco
la source

Réponses:

136

Ceci est une variante simplifiée de la solution de Strager :

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

Edit: Merci à Jakub de m'avoir appris un peu plus dans les commentaires, cette version a un pipeline plus court et donne plus d'opportunités à git de bien faire les choses.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
la source
8
@Dustlin: Add --diff-filter = Une option (liste uniquement les fichiers ajoutés). La version actuelle (sans filtrage sed, uniquement les fichiers ajoutés) échouerait si vous avez activé la détection de changement de nom et que vous avez renommé dans l'historique. Je pense que vous pouvez alors utiliser --name-only au lieu de --name-status et supprimer 'cut -f2-' du pipeline.
Jakub Narębski
Dans l'un de mes dépôts, j'obtiens pas mal de lignes en double (y compris un certain nombre de lignes vierges au début de la sortie) avec la deuxième commande qui ne sont pas dupes avec la première.
Slipp D.Thompson
Si vous avez besoin d'un peu plus d'informations que le nom du fichier: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | couper -f2- | sort -u | grep Filename.ext
Nitay
3
Remarque: --allc'est quelque chose dont vous aurez besoin si vous avez plus d'un seul pourboire orphelin. Par exemple, plusieurs historiques séparés dans un seul repo.
ThorSummoner
2
--diff-filter=Aignore les fichiers qui ont été créés en copiant un fichier déjà existant, donc l'ajouter peut ne pas toujours être ce que vous voulez.
cmbuckley
13

Cela fait la bonne chose pour vérifier si un nom de fichier était jamais présent dans le dépôt et pas seulement sur la branche actuelle.

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

Vous pouvez exécuter git-log --name-status, ce qui fait écho à quelque chose comme:

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

    Added test file.

A       test

Puis extraire les fichiers ajoutés:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
strager
la source
2

Voici deux alias utiles: FindFile ffet 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 #"

Vous obtenez des informations sur les noms de fichiers et leurs opérations.

Exemple d'utilisation:

$ 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
la source