Mam kilka plików w moim repozytorium, które należy zignorować, dodałem je do .gitignore, ale oczywiście nie są one usuwane z mojego repozytorium.
Moje pytanie brzmi: czy istnieje magiczne polecenie lub skrypt korzystający z gałęzi filter, który może przepisać moją historię i łatwo usunąć wszystkie te pliki? A może po prostu polecenie, które utworzy zatwierdzenie, które je usunie?
Odpowiedzi:
Możesz usunąć je z repozytorium ręcznie:
Lub, jeśli masz dużo plików:
Ale to nie działa w Git Bash w systemie Windows. Powoduje wyświetlenie komunikatu o błędzie. Następujące działa lepiej:
Jeśli chodzi o przepisywanie całej historii bez tych plików, bardzo wątpię, aby istniał automatyczny sposób.
Wszyscy wiemy, że przepisywanie historii jest złe, prawda? :)
źródło
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
wydaje się załatwić sprawęgit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Łatwiejszym sposobem, który działa na dowolnym systemie operacyjnym, jest zrobienie tego
Zasadniczo przeczytałeś wszystkie pliki, z wyjątkiem tych w .gitignore
źródło
Ponieważ pliki w .gitignore nie są śledzone, możesz użyć polecenia git clean, aby rekurencyjnie usunąć pliki, które nie są pod kontrolą wersji.
Użyj,
git clean -xdn
aby wykonać próbę na sucho i zobaczyć, co zostanie usunięte.Następnie użyj,
git clean -xdf
aby go wykonać.Zasadniczo
git clean -h
lubman git-clean
(w Uniksie) da ci pomoc.Należy pamiętać, że to polecenie spowoduje również usunięcie nowych plików , które nie znajdują się w obszarze przemieszczania.
Mam nadzieję, że to pomoże.
źródło
.gitignore
są śledzone.git clean -xdn
jest sucho, która nie usunie. następny będzie.Zrobiłem bardzo proste rozwiązanie, manipulując danymi wyjściowymi instrukcji .gitignore za pomocą sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Wyjaśnienie:
źródło
sed
jest proste?W Linuksie możesz użyć tego polecenia:
na przykład chcę usunąć „* .py ~”, więc moim poleceniem powinno być ==>
find . -name "*.py~" -exec rm -f {} \;
źródło
Git zignoruje pliki pasujące do wzorca .gitignore po dodaniu go do .gitignore.
Ale pliki już istniejące w repozytorium będą nadal w.
służy
git rm files_ignored; git commit -m 'rm no use files'
do usuwania ignorowanych plików.źródło