Wypisz wszystkie pliki, które kiedykolwiek istniały w repozytorium Git

109

Czy masz czysty sposób na wyświetlenie wszystkich plików, które kiedykolwiek istniały w określonej gałęzi?

elmarco
źródło

Odpowiedzi:

136

Jest to uproszczona odmiana Strager w roztworze :

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

Edycja: Dzięki Jakubowi za nauczenie mnie nieco więcej w komentarzach, ta wersja ma krótszy rurociąg i daje gitowi więcej możliwości, aby wszystko naprawić.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
źródło
8
@Dustlin: Dodaj --diff-filter = opcja (wyświetl tylko dodane pliki). Obecna wersja (bez filtrowania seda tylko dodanych plików) nie powiedzie się, jeśli włączysz wykrywanie zmian i zmiany nazw są zapisane w historii. Myślę, że możesz wtedy użyć --name-only zamiast --name-status i usunąć „cut -f2-” z potoku.
Jakub Narębski
W jednym z moich repozytoriów otrzymuję kilka zduplikowanych wierszy (w tym kilka pustych wierszy na początku danych wyjściowych) z drugim poleceniem, które nie jest dublowane z pierwszym.
Slipp D. Thompson
Jeśli potrzebujesz nieco więcej informacji niż nazwa pliku: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | cut -f2- | sort -u | grep Nazwa
pliku.ext
3
Uwaga: --alljest to coś, czego będziesz potrzebować, jeśli masz więcej niż jedną osieroconą końcówkę. Np. Wiele oddzielnych historii w jednym repozytorium.
ThorSummoner
2
--diff-filter=Aignoruje pliki, które zostały utworzone przez skopiowanie już istniejącego pliku, więc dodanie go może nie zawsze być zgodne z oczekiwaniami.
cmbuckley
13

Robi to dobrze, jeśli chodzi o sprawdzenie, czy nazwa pliku była kiedykolwiek obecna w repozytorium, nie tylko w bieżącej gałęzi.

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar
dch
źródło
3

Możesz biegać git-log --name-status, co przypomina coś takiego:

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

    Added test file.

A       test

Następnie wypakuj dodane pliki:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
strager
źródło
2

Oto dwa przydatne aliasy: FindFile ffi 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 #"

Otrzymasz informacje o nazwach plików i operacjach na nich.

Przykładowe zastosowanie:

$ 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
źródło