2013-09-24 19 views
12

Mam repozytorium z wieloma autogenerowanymi plikami źródłowymi, które zostały oznaczone jako "binarne" w .gitattributes (są one sprawdzane, ponieważ nie każdy ma dostęp do narzędzi generatora). Dodatkowo repozytorium ma wiele plików źródłowych w ignorowanych katalogach (ponownie generowanych w ramach procesów kompilacji) i wiele rzeczywistych plików binarnych (np. Mało plików zasobów, takich jak ikony).Jak wyświetlić wszystkie pliki tekstowe (inne niż binarne) w repozytorium git?

Chciałbym teraz znaleźć wszystkie niezalogowane automatycznie i niezignorowane pliki w repozytorium. Pomyślałem, że po prostu robię to z find i kilkoma wyjątkami, ale teraz mam przerażającą deklarację find z tuzinem klauzul (i nadal nie działa to doskonale). git ls-files działa, ale pokazuje mi wszystkie pliki binarne bez różnicowania, które muszę odfiltrować.

Tak, zastanawiam się: czy istnieje proste polecenie, które można uruchomić, które zawiera listę wszystkich plików zaznaczonych na repozytorium, a które git uważa za plik "tekstowy"?

Odpowiedz

12
git grep --cached -Il '' 

Działa ponieważ:

  • -I: nie pasuje do wzorca w plikach binarnych
  • -l: tylko pokazać pasujące nazwy plików, nie pasujące wiersze
  • '': Zapałki pusty łańcuch dowolny plik

Lub możesz użyć How to determine if Git handles a file as binary or as text? w pętli for z git ls-files.

Znajdź wszystkie pliki binarne Zamiast: Find all binary files in git HEAD

ZASTRZEŻENIE: Cacovsky mówi podobną zawartość, starałem się zmieniać, aby poprawić formatu i wyjaśnić opcje Edycja została odwrócona, tak tu idzie :-)

+0

I do instalacji w 'xargs -0' dostępna jest opcja' -z'. – raphinesse

0

Standardową metodą wymieniając pliki non-ignorowany jest:

git ls-files --exclude-standard --cached 

Ale, jak widać, to wymienia wszystkie wersjonowanych plików.

Jednym z rozwiązań może być zdefiniowanie w oddzielnym pliku "exclude_binaries" exclusion pattern w celu dopasowania wszystkich znanych plików binarnych.

git ls-files --exclude-standard --cached \ 
--exclude-from=/path/to/`exclude_binaries` 

To byłoby mniej skomplikowane find, ale nie zapewnia w pełni zautomatyzowany sposób do listy plików binarnych non-: trzeba jeszcze określić i wymienić je w osobnym pliku sygnatur.

2

Sprytny Hack do osiągnięcia tego celu: wykaz wszystkich plików bez binarnych, który zawiera znaki powrotu karetki

$ git grep --cached -I -l -e $'\r' 

Na moim przypadku, pusty łańcuch działa lepiej:

$ git grep --cached -I -l -e $'' 

miał żadnych problemów z git list binary and/or non-binary files?.

+1

Nie ma potrzeby dla '$' w '$ ''' '' '' jest bardziej przenośne. –