2011-06-27 7 views
24

Chciałbym znaleźć zatwierdzenia w mojej bazie kodu, które dodają pliki wideo do ich wyrzucenia. Czy istnieje sposób, aby wyszukać te pliki w git?Znajdź zatwierdzenia modyfikujące nazwy plików pasujące do wzorca w repozytorium GIT.

Załóżmy na przykład, że wszystkie filmy mają nazwę pliku kończącą się rozszerzeniem .wmv; Chciałbym znaleźć wszystkie commity wprowadzające te pliki i pozbyć się ich z naprawą lub czymś podobnym.

Wszelkie pomysły?

Odpowiedz

30

można użyć git log z pathspec:

git log --all -- '*.wmv' 

to będzie Ci wszystkie rewizje, które sprawiają zmian pliki .wmv. tak, to również zejdzie do podkatalogów (ale musisz otoczyć swoje pathspec pojedynczymi cudzysłowami, więc zostanie przekazany tak, jak jest do git).

jeśli jesteś zainteresowany tylko popełnić hashe (skrypty itp) używają maszynerię git rev-list bezpośrednio:

git rev-list --all -- '*.wmv' 
+1

To w ogóle nie działało. Nie mam nic po tych dwóch komendach i długo czekać. – Bastes

+0

@bastes: w drzewie są też pliki n.o wmv ... @ adl's answer is better though – knittl

+0

Nie to nie działa. Próbuję git log - all - '\ *. Java' i nic nie znajduję podczas szukania. -name '\ *. java' wyświetla listę wszystkich plików. –

5

Jeśli chcesz usunąć te pliki z wszystkich zatwierdzeń, należy rozważyć przepisanie całą historię z filter-branch dowództwo. Np

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD 
+0

Cóż, właściwie to właśnie zamierzam zrobić. Dzięki za polecenie. – Bastes

0

Tak, jak wspomniano, myślę, że thinko że usuwając zobowiązuje które wprowadzają je nie zamierza usunąć plamy

Zobacz http://progit.org/book/ch9-7.html#removing_objects dla szerokiej leczenia pacjenta oraz przykłady

+0

Bardzo przydatny link, wielkie dzięki. – Bastes

+0

Ten link jest teraz uszkodzony: Spróbuj https://git-scm.com/book/pl/v2/Git-Internals-Maintenance-and-Data-Recovery#Removing-Objects – Eosis

0

Jeśli celem jest usunięcie plików z repozytorium (przepisywanie historii w ten sposób), użyj BFG Repo-Cleaner, np:

bfg --delete-files '*.wmv' --private --no-blob-protection 

Jeśli pliki są istotne, możesz zachować je pod kontrolą wersji, używając Git LFS. Aby migrate (także przepisywania historii), można zrobić coś takiego jak:

git-lfs-migrate \ 
    -s original.git \ 
    -d converted.git \ 
    -l https://user:[email protected]:8080 \ 
    '*.wmv' 

aby po prostu listy lub zbadać zobowiązuje, odsyłam do odpowiedzi Knittla za:

git rev-list --all -- '*.wmv' 
git log --all -- '*.wmv' 
0

ten może pracować w gitk, jak również, za pomocą plików Widok/Nowy widok/Wprowadź i katalogów do uwzględnienia, po jednym w polu liniowym.

Należy jednak pamiętać, że potrzebna jest wieloznacznik obejmujący sekcję ścieżki nazwy pliku, ponieważ w przeciwnym razie nic się nie wyświetli. (!)

przykład jeśli miał plik o nazwie backup-script.sh, z bogatym życiem pojawiającym się w różnych miejscach w drzewie plików i chcesz zobaczyć wszystkie wersje, a następnie należy podać:

*/backup-script.sh 
1

można spróbować to:

git log --follow *.wmv 

będzie to lista wszystkich zobowiązuje (hash), które zmodyfikowane pliki wMV.

+0

Nie do końca potrzebny program OP: '--follow 'działa tylko dla jednego pliku w najnowszym Git. – wotopul

Powiązane problemy