Listen Sie alle Dateien auf, die jemals in einem Git-Repository vorhanden waren

108

Haben Sie eine saubere Möglichkeit, alle Dateien aufzulisten, die jemals in einem bestimmten Zweig vorhanden waren?

Elmarco
quelle

Antworten:

135

Dies ist eine vereinfachte Variante der Strager- Lösung :

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

Bearbeiten: Dank Jakub, der mir in den Kommentaren etwas mehr beigebracht hat, hat diese Version eine kürzere Pipeline und gibt Git mehr Gelegenheit, die Dinge richtig zu machen.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
quelle
8
@Dustlin: Add --diff-filter = Eine Option (nur hinzugefügte Dateien auflisten). Die aktuelle Version (ohne Sed-Filterung nur hinzugefügte Dateien) schlägt fehl, wenn Sie die Umbenennungserkennung aktiviert haben und Umbenennungen im Verlauf haben. Ich denke, Sie können dann --name-only anstelle von --name-status verwenden und 'cut -f2-' aus der Pipeline entfernen.
Jakub Narębski
In einem meiner Repos erhalte ich mit dem zweiten Befehl einige doppelte Zeilen (einschließlich einer Reihe von Leerzeilen am Anfang der Ausgabe), die mit dem ersten nicht betrogen werden.
Slipp D. Thompson
Wenn Sie etwas mehr Informationen als den Dateinamen benötigen: $ git log --pretty = Format: "% h% an [% cd]:% s" - nur Name | cut -f2- | sort -u | grep Filename.ext
Nitay
3
Hinweis: Dies --allist etwas, das Sie benötigen, wenn Sie mehr als ein verwaistes Trinkgeld haben. ZB mehrere separate Historien in einem Repo.
ThorSummoner
2
--diff-filter=Aignoriert Dateien, die durch Kopieren einer bereits vorhandenen Datei erstellt wurden, sodass das Hinzufügen möglicherweise nicht immer Ihren Wünschen entspricht.
cmbuckley
13

Dies ist das Richtige, um zu überprüfen, ob jemals ein Dateiname im Repo vorhanden war, nicht nur im aktuellen Zweig.

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

Sie können laufen git-log --name-status, was so etwas wie:

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

    Added test file.

A       test

Dann extrahieren Sie die hinzugefügten Dateien:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
Strager
quelle
2

Hier sind zwei nützliche Alias: FindFile ffund 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 #"

Sie erhalten Informationen über Dateinamen und Operationen mit ihnen.

Beispielverwendung:

$ 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
quelle