2009-10-05 148 views
1

我有一個相當大的svn存儲庫,我使用git進行訪問。到目前爲止一切工作正常。現在有人不小心將一些大塊的二進制數據添加到svn存儲庫中。 (幾百MB!) 當然git也吸入這些塊(使用git-svn)。從svn同步git存儲庫中刪除數據

有沒有辦法來選擇性地從混帳刪除一些文件,而不干擾與svn庫同步?

回答

0

差點忘了這個...對不起。

因爲事實證明,我沒有簡單的解決我所描述的問題。我嘗試了幾種選擇,但是每個人都有缺點......不過,也許是有益的,如果任何人有同樣的問題:

從git的歷史

git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f 

優點刪除不需要的文件/文件夾:

  • 有效地從你的資料庫

ç刪除該文件ons:

  • 你將不得不清理你的倉庫(擺脫舊的提交,因爲他們仍然在git倉庫中)。或者s.th.沿着git gc --prune=now或只克隆你的倉庫(在默認情況下無法克隆你的遠程SVN分支)
  • 分支你不會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的)
0

你可以嘗試使用git svn的'忽略路徑'來指定已添加的二進制文件的名稱。您可能需要執行'svn reset'以回到添加它們的時間點,然後過濾路徑以刪除這些文件。

+0

NB,這將有來自SVN的角度改變歷史的影響提交開始,所以其他的Git用戶將需要重訂關閉它在你做完這些之後。 – AlBlue 2009-10-05 18:53:39

+0

不幸的是,這不是一個選項,因爲我不能改變svn歷史了 – oliver 2009-10-07 08:24:52

1

我認爲使用git filter-branch --tree-filter "rm -rf unwanted_dir"重寫git歷史記錄不會影響同步 - 據我所知,git-svn只取決於提交消息中的git-svn-id,它應該保持不變。雖然我沒有嘗試過。 ☺

+0

聽起來有點可怕...但仍然合理。我會試一試克隆回購:) 感謝您的提示 – oliver 2009-10-07 08:26:36