Czy możliwe jest „odświeżenie” repozytorium git po zaktualizowaniu pliku gitignore?
Właśnie dodałem więcej ignorancji (?) Do mojego gitignore i chciałbym usunąć rzeczy już w repozytorium pasujące do nowego pliku.
Czy możliwe jest „odświeżenie” repozytorium git po zaktualizowaniu pliku gitignore?
Właśnie dodałem więcej ignorancji (?) Do mojego gitignore i chciałbym usunąć rzeczy już w repozytorium pasujące do nowego pliku.
Odpowiedzi:
Rozwiązanie wspomniane w „ Nie ignorowaniu pliku .gitignore ” jest nieco ekstremalne, ale powinno działać:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( Upewnij się, aby popełnić pierwsze zmiany, które chcesz zachować , aby uniknąć incydentu jako jball037 komentarze poniżej . Opcja zachować swoje pliki nietknięty na dysku chociaż).--cached
Masz też inne, bardziej szczegółowe rozwiązanie w blogu „ Sprawianie, aby Git ignorował już śledzone pliki ”:
git rm --cached `git ls-files -i --exclude-standard`
Bassim sugeruje w swoim wydaniu :
W przypadku
fatal: path spec '...' did not match any files
pojawienia się komunikatu o błędzie , na ścieżce mogą znajdować się pliki ze spacjami.Możesz usunąć wszystkie inne pliki za pomocą opcji
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
ale niedopasowane pliki pozostaną w twoim repozytorium i będą musiały zostać jawnie usunięte poprzez umieszczenie ich ścieżki w podwójnych cudzysłowach:
git rm --cached "<path.to.remaining.file>"
Mogę źle zrozumieć, ale czy próbujesz usunąć pliki, które zostały zignorowane, czy chcesz zignorować nowe modyfikacje tych plików? W tym przypadku rzecz działa.
Jeśli chcesz usunąć zignorowane wcześniej zatwierdzone pliki, użyj
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'posprzątaj' '
Wiem, że to stare pytanie, ale rozwiązanie Gracchusa nie działa, jeśli nazwy plików zawierają spacje. Rozwiązaniem VonC do nazw plików ze spacjami jest nieużywanie ich --ignore-unmatch
, a następnie usuwanie ich ręcznie, ale nie będzie to działać dobrze, jeśli jest ich dużo.
Oto rozwiązanie wykorzystujące tablice bash do przechwytywania wszystkich plików.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'