我使用下列來源,從我的倉庫抹去一些大的文件和目錄過濾分支:混帳,所有分支上
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Why is my git repository so big?
git filter-branch
似乎只在工作當前分支 - 是否有辦法一次將其應用到所有分支?
我使用下列來源,從我的倉庫抹去一些大的文件和目錄過濾分支:混帳,所有分支上
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Why is my git repository so big?
git filter-branch
似乎只在工作當前分支 - 是否有辦法一次將其應用到所有分支?
的解決方案是簡單的:
git filter-branch [options] -- --all
注意這四個破折號(兩套在它們之間具有空間雙破折號)在-- --all
。
如果你看一下文檔的git-filter-branch
,就這樣說:
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>…]
閱讀,在文檔的開頭說:「讓您通過重寫<提到的分支改寫git的修訂歷史記錄rev-list選項>,在每個修訂版上應用自定義過濾器。「
所以檢查文檔爲rev-list
給出:
< REV-列表選項> ...混帳爲REV-列表參數。這些選項包含的所有正面參考 都被重寫。您也可以指定選項 ,例如 - all,但您必須使用 - 將它們與git filter-branch選項分開。
而對於git-rev-list
文檔說:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
正如@奔 - 李的回答解釋說,--all
需要重寫所有分支。如果您的回購中有標籤,您需要清除所有那些以及分支機構,以便獲得減小尺寸的好處,並且這將需要額外的--tag-name-filter cat
咒語。
雖然問題指定使用git filter-branch
,提問要「從我的倉庫刪掉一些大的文件和目錄」,所以它是值得一提的是,最好工具,這樣做實際上是The BFG Repo Cleaner,更簡單,更快的替代git filter-branch
。例如:
$ bfg --strip-blobs-bigger-than 10M
...刪除超過10MB的所有斑點(不在你最新提交),並適用於所有分支標籤&在你的回購協議。
完全披露:我是BFG Repo-Cleaner的作者。
沒問題@EoghanM - 你可能會發現這個演示視頻很有趣 - 它是git filter-branch和BFG(運行在Raspberry Pi上)之間的競賽。http://www.youtube.com/watch?v=Ir4IHzPhJuI –
我遵循所有的說明,在我的Windows機器上這樣做,但我一直得到一個錯誤,直到我停止使用單引號並使用雙引號代替。
我的動機是我不小心檢查了我的vagrant
環境。這裏的命令從所有分支刪除vagrant
文件夾:
git filter-branch --tree-filter "rm -rf vagrant" -f HEAD --all
與目錄名稱只需更換vagrant
,它會從所有分支刪除該目錄。
只是爲了闡明,通常'filter-branch'在最後用'HEAD'列出,' - --all'代替'HEAD' – EoghanM
如何使它在PowerShell(Windows)中工作?它保持錯誤並顯示「filter-branch」的幫助信息。根據Paul的回答,我嘗試改爲雙引號,但我無法在那裏找到雙引號(請參閱我對答案的評論)。 – ADTC
我通過使用管道解決了上述問題(在PowerShell函數中)。基本上:'git rev-list --all | git filter-branch [options]'(最後沒有rev-list)而不是'git filter-branch [options] - --all'。 – ADTC