我有一個相當大的svn存儲庫,我使用git進行訪問。到目前爲止一切工作正常。現在有人不小心將一些大塊的二進制數據添加到svn存儲庫中。 (幾百MB!) 當然git也吸入這些塊(使用git-svn)。從svn同步git存儲庫中刪除數據
有沒有辦法來選擇性地從混帳刪除一些文件,而不干擾與svn庫同步?
我有一個相當大的svn存儲庫,我使用git進行訪問。到目前爲止一切工作正常。現在有人不小心將一些大塊的二進制數據添加到svn存儲庫中。 (幾百MB!) 當然git也吸入這些塊(使用git-svn)。從svn同步git存儲庫中刪除數據
有沒有辦法來選擇性地從混帳刪除一些文件,而不干擾與svn庫同步?
差點忘了這個...對不起。
因爲事實證明,我沒有簡單的解決我所描述的問題。我嘗試了幾種選擇,但是每個人都有缺點......不過,也許是有益的,如果任何人有同樣的問題:
從git的歷史
git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f
優點刪除不需要的文件/文件夾:
ç刪除該文件ons:
git gc --prune=now
或只克隆你的倉庫(在默認情況下無法克隆你的遠程SVN分支)git svn fetch
混帳仍將獲取不變的歷史切SVN的歷史當最初克隆
git svn clone -r N http://yoursvnaddress myPartlyClonedRepo.git
其中N將是最早的版本號即同步的
優點:
缺點:
稀疏結賬
這已經是最近才加入的混帳1.7,並允許你有選擇性地改變你的工作目錄
git config core.sparsecheckout true
echo "*" > .git/info/sparse-checkout
echo '!path-to-huge-unwanted-dir/' >> .git/info/sparse-checkout
git read-tree -m -u HEAD
優點
缺點
你可以嘗試使用git svn的'忽略路徑'來指定已添加的二進制文件的名稱。您可能需要執行'svn reset'以回到添加它們的時間點,然後過濾路徑以刪除這些文件。
我認爲使用git filter-branch --tree-filter "rm -rf unwanted_dir"
重寫git歷史記錄不會影響同步 - 據我所知,git-svn
只取決於提交消息中的git-svn-id,它應該保持不變。雖然我沒有嘗試過。 ☺
聽起來有點可怕...但仍然合理。我會試一試克隆回購:) 感謝您的提示 – oliver 2009-10-07 08:26:36
NB,這將有來自SVN的角度改變歷史的影響提交開始,所以其他的Git用戶將需要重訂關閉它在你做完這些之後。 – AlBlue 2009-10-05 18:53:39
不幸的是,這不是一個選項,因爲我不能改變svn歷史了 – oliver 2009-10-07 08:24:52