Czy mogę uzyskać listę plików oznaczonych --assume-niezmieniona?

325

Co oznaczyłem jako --assume-unchanged? Czy jest jakiś sposób, aby dowiedzieć się, co ukryłem, korzystając z tej opcji?

Przekopałem się przez .git/katalog i nie widzę niczego, co wyglądałoby tak, jak się spodziewałem, ale musi gdzieś być. Zapomniałem, co zaznaczyłem w ten sposób kilka tygodni temu i teraz muszę udokumentować te szczegóły przyszłym programistom.

Rob Wilkerson
źródło

Odpowiedzi:

449

Możesz użyć git ls-files -v. Jeśli drukowany znak jest pisany małymi literami, plik jest oznaczany jako zakładany bez zmian.

Aby wydrukować tylko niezmienione pliki, użyj:

git ls-files -v | grep '^[[:lower:]]'

Aby objąć swojego leniwego programistę, zmień to w alias git . Edytuj .gitconfigplik, aby dodać ten fragment:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Teraz wpisanie git ignoreddaje wynik w następujący sposób:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
źródło
42
git ls-files -v | grep ^ [az]
Matt R
17
Mój system operacyjny najwyraźniej ma dziwną konfigurację sortowania, więc polecenie Matta nie zadziałało dla mnie. Oto, co dodałem w [alias]sekcji mojej .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker,
15
Powodem [az] nie jest to, że powłoka rozwija go jako symbol wieloznaczny; jeśli bieżący katalog zawiera plik pasujący do tego wzorca (tj. pojedynczą małą literę), wówczas rozwinięciem tego jest nazwa pliku. Spróbuj dodać cytaty, np. „[Az]”
DomQ
7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari
12
Sugerowane aliasy działają w celu znalezienia niezmienionych plików w bieżącym katalogu i poniżej. Jeśli chcesz mieć listę wszystkich „niezmienionych” plików w repozytorium, będziesz potrzebowaćgit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude
65

Jedna wkładka

git ls-files -v | grep "^[a-z]"

Użyj aliasów

IMHO git hiddenjest lepszy dla plików oznaczonych jako --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Oto lista powiązanych aliasów, w których mam ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

Aby działał w podkatalogach i obsługiwał argumenty :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

Na przykład:

 # cd target
 # git ignored classes

Informacje o statusie pliku

Dla mnie większość ukrytych plików jest oznaczona flagą h, choć tak naprawdę jest kilka innych flag zgodnie z instrukcją git-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

O git ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other
ryenus
źródło
1
Ładne, łatwe do zapamiętania pseudonimy :) Dzięki
PlagueHammer
1
Oto kilka bardziej elastycznych wariantów: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"i ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Pozwala to na przykład git ignored -- PATH1 PATH2na wyświetlanie listy zignorowanych plików tylko w określonych ścieżkach (przydatne, gdy masz wiele ignorowanych plików).
sls
Dziękuję za pseudonim
MOHRE
22

To polecenie działa dla mnie bardziej konsekwentnie. Będzie drukować tylko pliki wymienione jako „zakładaj bez zmian”.

git ls-files -v|grep "^h"

Używałem tego wiele razy w różnych środowiskach i działa idealnie.

Earl3s
źródło
5
W wierszu polecenia systemu Windows użyj grep "^h"zamiast pojedynczych cudzysłowów
piękny
7

Rozwiązanie PowerShell, używając Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive
Thowk
źródło
3

Rozwiązanie wiersza polecenia systemu Windows za pomocą findstr :

git ls-files -v | findstr /B h
Wowa
źródło