2010-09-20 23 views
2

我剛剛在RHEL5機器上使用cvs2git在一個單一的git倉庫中轉換了10G CVS倉庫(約120個模塊),沒有任何錯誤。 我想從存儲庫中拆分一個子目錄+歷史記錄並創建一個新的。 (像:How can I move a single directory from a git repository to a new repository whilst maintaining the history?git filter-branches - 最後沒有進展

我想:

git filter-branch --subdirectory-filter xxx.model -- --all 

的正常工作,直到最後一項被處理 - 那麼它掛起使用CPU沒有任何進展。 使用strace,它看起來像這樣:[斷開鏈接]。 strace - 所有分支都以> 2.5G輸出結束 - 我不知道它是否會變大;我阻止了它。

什麼是造成這種奇怪的行爲? 是否有任何其他方法創建一個新的存儲庫的子目錄+現有存儲庫的歷史記錄?

+0

自己完成了這種轉換後,我同意@ mhagger關於分段轉換的評論。不過,您所體驗的聲音聽起來像是git filter-branch中的一個bug。您應該儘可能多地向Git郵件列表發佈信息,並在那裏詢問。 – Novelocrat 2010-09-21 19:46:00

回答

2

運行數小時後,操作成功完成。唯一的問題是,我們覺得沒有進展,但事實並非如此。沒有輸出。

設置GIT_TRACE = 1並重做命令,並且輸出和進度可見。

標籤數量過多可能導致操作速度變慢。

+0

事實上,我發現如果必須重寫很多分支/標籤,「git filter-branch」會非常慢。我剛剛提交了補丁來解決這個問題。 – mhagger 2011-10-29 06:51:49

+0

我們的項目有很多標籤。痕跡顯示那些滴滴答答。 – 2018-02-20 21:49:32

0

無論你做什麼都需要重寫現有的git存儲庫。因此,您可能只需再次運行轉換,首先拆分項目然後分別轉換項目。

如果這兩個項目已經位於CVS存儲庫的不同子目錄中,則可以簡單地將cvs2git指向一個子目錄,然後指向另一個子目錄。

如果項目彼此更混雜,則複製CVS存儲庫,使用filesystem命令將項目分離爲單獨的子目錄,然後再單獨轉換它們。

+0

謝謝 - 這將是當前情況的一種可能的解決方案(新庫已轉換/創建)。但是如果我們有一天想重新調整資源庫的話,問題就更爲普遍了。 – usr200910 2010-09-22 09:27:05

0

對freenode /#git中的人說話我發現了另一種方法,通過刪除(git rm)除了我想保留的目錄之外的所有內容。

git filter-branch --prune-empty --index-filter "git ls-files --exclude-standard |grep -v '^foobar'|xargs git rm -r -f --cached --ignore-unmatch" HEAD 

這個操作很慢,但工作(猜測是這樣)。由於墮胎,我沒有看到結果。

順便說一句:#git中的某個人告訴我,這些操作通常可能需要幾天時間才能完成,所以如果我等待(儘管看起來沒有進展/「它掛起」),它很可能已經完成。