git, filter-branch na wszystkich gałęziach
Używam następujących źródeł do usuwania dużych plików i katalogów z mojego repozytorium:
Http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Dlaczego moje repozytorium git jest tak duże?
git filter-branch
tylko wydaje się działać na bieżącej gałęzi - czy istnieje sposób, aby zastosować go do wszystkich gałęzi na raz?
3 answers
Rozwiązanie jest proste:
git filter-branch [options] -- --all
zwróć uwagę na cztery myślniki (dwa zestawy podwójnych myślników ze spacją pomiędzy) W -- --all
.
Jeśli spojrzysz na dokumenty dla git-filter-branch
, mówi to:
git filter-branch [--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--subdirectory-filter <directory>]
[--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--] [<rev-list options>…]
Czytając dalej, początek dokumentu mówi: "pozwala przepisać historię rewizji Gita przez przepisanie gałęzi wymienionych w opcjach
Więc sprawdzanie dokumentów dla rev-list
daje:
... Arguments for git rev-list. Wszystkie pozytywne refy zawarte przez te opcje są przepisywane. Możesz również określić opcje takie jak -- wszystkie, ale musisz użyć -- aby oddzielić je od Gita opcje filter-branch.
I dokumenty dla git-rev-list
mówią:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 12:02:23
Jak wyjaśnia odpowiedź @ ben-lee, --all
jest wymagane do przepisania wszystkich gałęzi. Jeśli masz tagi w repo, będziesz chciał wyczyścić wszystkie te , a także gałęzie, aby uzyskać korzyści z redukcji rozmiaru, a to będzie wymagało dodatkowego --tag-name-filter cat
zaklęcie.
Chociaż pytanie określa użycie git filter-branch
, pytający chce " usunąć niektóre duże pliki i katalogi z mojego repozytorium ", warto więc wspomnieć, że najlepszym narzędziem do tego jest BFG Repo Cleaner, prostsza, szybsza alternatywa dla git filter-branch
. Na przykład:
$ bfg --strip-blobs-bigger-than 10M
...usuwa wszystkie obiekty BLOB większe niż 10MB (które nie znajdują się w ostatnim commicie ) i działa na wszystkich gałęziach i tagach w repo.
pełne ujawnienie: jestem autorem BFG Repo-Cleaner.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:14
Postępowałem zgodnie ze wszystkimi instrukcjami w moim oknie Windows, ale ciągle otrzymywałem błąd, dopóki nie przestałem używać pojedynczych cudzysłowów i zamiast tego używałem podwójnych cudzysłowów.
Moją motywacją było to, że przypadkowo sprawdziłem w moim środowisku. Oto polecenie usunięcia folderuvagrant
ze wszystkich gałęzi:
git filter-branch --tree-filter "rm -rf vagrant" -f HEAD --all
Po prostu zastąp vagrant
swoją nazwą katalogu, a to usunie ten katalog ze wszystkich gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 12:44:56