Sposób, w jaki Git ignoruje oglądanie / śledzenie określonego katalogu / pliku. po prostu uruchom to:
git update-index --assume-unchanged <file>
Jak to cofnąć, aby można je było oglądać ponownie? (Nazwijmy to nieprzyjęciem).
Sposób, w jaki Git ignoruje oglądanie / śledzenie określonego katalogu / pliku. po prostu uruchom to:
git update-index --assume-unchanged <file>
Jak to cofnąć, aby można je było oglądać ponownie? (Nazwijmy to nieprzyjęciem).
Odpowiedzi:
Aby uzyskać cofnięcie / pokaż katalog / pliki, które są ustawione na przyjęcie niezmienionej, uruchom to :
git update-index --no-assume-unchanged <file>
Aby uzyskać listę plików / katalogów, które są assume-unchanged
uruchamiane :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
, która da ci tylko nazwy plików, bez prefiksu „h”.
assume-unchanged
, po prostu użyj git update-index --really-refresh
. Dzięki temu poleceniu nie musisz git ls-files
najpierw szukać plików .
Jeśli jest to polecenie, którego często używasz - możesz również rozważyć użycie dla niego aliasu. Dodaj do swojej globalnej .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Jak ustawić alias (jeśli jeszcze tego nie wiesz):
git config --configLocation alias.aliasName 'command --options'
Przykład:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Po zapisaniu tego w swoim .gitconfig
pliku możesz uruchomić czystsze polecenie.
git hide myfile.ext
lub
git unhide myfile.ext
Ta dokumentacja git była bardzo pomocna.
Zgodnie z komentarzami jest to również pomocny alias, aby dowiedzieć się, jakie pliki są obecnie ukryte:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
git update-index ma kilka opcji, które możesz wpisać poniżej:
git update-index --help
Tutaj znajdziesz różne opcje - jak obsługiwać za pomocą funkcji update-index.
[jeśli nie znasz nazwy pliku]
git update-index --really-refresh
[jeśli znasz nazwę pliku]
git update-index --no-assume-unchanged <file>
przywróci wszystkie pliki, które zostały dodane do listy ignorowanych przez.
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
uratowałem moje życie .. OK, mógłbym ponownie zsynchronizować folder, ale chciałem „prawdziwego” rozwiązania tego problemu.
Aby zsyntetyzować doskonałe oryginalne odpowiedzi od @adardesign, @adswebwork i @AnkitVishwakarma oraz komentarze od @Bdoserror, @Retsam, @seanf i @torek, z dodatkowymi linkami do dokumentacji i zwięzłymi aliasami ...
Podstawowe polecenia
Aby zresetować plik, który nie został zmieniony z powrotem na normalny:
git update-index --no-assume-unchanged <file>
Aby wyświetlić listę wszystkich plików, które są niezmienione:
git ls-files -v | grep '^[a-z]' | cut -c3-
Aby zresetować wszystkie niezmienione pliki z powrotem do normalnego:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Uwaga: To polecenie, które zostało wymienione gdzie indziej, nie wydaje się już resetować wszystkich plików zakładanych bez zmian (myślę, że kiedyś to poprzedziło i jako rozwiązanie):
git update-index --really-refresh
Skróty
Aby ułatwić wykonywanie tych typowych zadań w git, dodaj / zaktualizuj następującą sekcję aliasów.gitconfig
dla swojego użytkownika (np. W ~/.gitconfig
systemie * nix lub macOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
możesz osiągnąć ten sam efekt bez aliasów powłoki i skryptów, używając w !
ten sposób:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
nie usuwa (lub już nie usuwa, być może kiedyś to usunęło) flag zakładających niezmienione flagi w plikach indeksu.
Jeśli chcesz cofnąć wszystkie zastosowane pliki, zakładając niezmienione, o dowolnym statusie, nie tylko buforowane (git zaznacza je znakami małymi literami), możesz użyć następującego polecenia:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
wydrukuje wszystkie pliki z ich statusemgrep '^[a-z]'
będzie filtrować pliki i zaznaczać tylko zakładając niezmienionecut -c 3-
usunie status i pozostawi tylko ścieżki, odcinając od trzeciego znaku do końcatr '\012' '\000'
zamieni znak końca linii (\ 012) na zero (\ 000)xargs -0 git update-index --no-assume-unchanged
przejdzie wszystkie ścieżki oddzielone znakiem zero, git update-index --no-assume-unchanged
aby cofnąćDodając do @adardesign
odpowiedzi, jeśli chcesz zresetować wszystkie pliki, które zostały dodane do assume-unchanged
listy za no-assume-unchanged
jednym razem, możesz wykonać następujące czynności:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Spowoduje to po prostu usunięcie dwóch znaków wyjściowych z grep, tj. "h "
Następnie ucieczkę ze spacji, które mogą występować w nazwach plików, a na koniec || true
zapobiegnie przedwczesnemu zakończeniu polecenia w przypadku, gdy niektóre pliki w pętli zawierają błędy.
Jeśli używasz rozszerzeń Git , wykonaj następujące kroki:
Gotowe.
Nic tu nie jest objęte. Ale chciałbym dodać moje 2 centy. Czasami uruchamiam kompilację, która zmienia wiele plików, a potem chcę nad czymś popracować, więc to polecenie naprawdę mi bardzo pomaga.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Mam nadzieję, że ktoś inny uzna to za przydatne.
.gitignore
ignorowania artefaktów kompilacji.
.gitignore
ale to jest czasami, z mojego doświadczenia nie jest wystarczające. Ale rozumiem kontekst, w którym to mówisz.
Żadne z rozwiązań nie działało dla mnie w systemie Windows - wydaje się, że używa ono kapitału, H
a nie h
statusu pliku, a polecenie grep wymaga dodatkowej karetki, ponieważ ^
reprezentuje także początek linii, a także neguje następny znak.
Rozwiązanie Windows
git ls-files -v | grep '^^H'
aby wyświetlić listę wszystkich niebuforowanych plikówgit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
aby cofnąć pomijanie wszystkich plików wykonanych za pomocą update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
aby cofnąć pomijanie wszystkich plików wykonanych za pomocą update-index --assume-unchanged
git ls-files -v | grep '^^H'
aby ponownie wyświetlić listę wszystkich niebuforowanych plików i sprawdzić, czy powyższe polecenia zadziałały - nie powinno to teraz niczego zwracać