2013-10-15 94 views
3

目前我打算幫助一個開源項目的相當大的git轉換。 存儲庫相當大,所以試用&錯誤很慢(超過60,000次提交)。svn to git轉換(如何檢查存儲庫質量)

有很多與有關的問題如何完成git轉換,但幾乎沒有關於如何檢查轉換是否有效的詳細信息。

當然也有像兩個回購設定的修訂和比較庫的內容,但歷史,在提交信息...移動文件,跟蹤分支機構等之間變化的基礎 - 變得更加複雜。

所以我的問題是:

  • 哪些領域應該在新轉換的git倉庫進行檢查,發現轉換是正確的,成功了嗎?
  • 有什麼需要注意的問題?
  • 任何人都可以提出評估轉換svn項目的策略,以確保在轉換過程中沒有出錯嗎?

:目前我們使用reposurgeon但是應該對答案沒有霸菱,但它確實意味着我們要做一個一次性的轉換和得到,它右

+0

也許更好地讓過渡更平緩,即保持Subvresion資料庫在線(至少只讀)一段時間?如果在轉換過程中沒有錯誤消息+一年後沒有人會抱怨任何缺失的信息,那麼考慮穩定的git存儲庫;並在失蹤的情況下從SVN獲取它。 –

+0

@Vi,是的,我們會扔掉svn回購,我有一個本地副本(用於測試),我們保留備份。即使我們有SVN可用,並且它可能(原則上)可以返回並使用它。 - 一旦我們有了幾個月的發展 - 發現一些錯誤將會非常棘手,要回頭去糾正(我猜可能無論如何,重寫歷史的工具存在但不是微不足道的) - 很可能我們只是與我一起生活,我想避免。 – ideasman42

+1

在Git中,如果有人重寫了歷史記錄併發布了它(使用'push --force'),如果您記住原始歷史記錄的上次提交SHA-1值(並且尚未進行垃圾回收),則仍然可以訪問原始歷史記錄。您還可以設置規則以防止在使用denyDelete和denyNonFastForward進行推送時覆蓋歷史記錄。 –

回答

0

如果您使用的git - svn的插件,你可以只克隆你的SVN倉庫與有效地創建一個Git回購完成完整的歷史當地git的客戶端。這不僅超級簡單且超級快捷,而且您可以相信您已與現有的svn repo正確同步,甚至可以在初始克隆後發生可能發生的更改。

至於要注意的事情,git不跟蹤空文件夾。另一個問題是處理二進制文件,你希望不存儲在你現有的回購中。您不想通常在git倉庫中存儲大型二進制文件。有幾個git特定的解決方案,你可以谷歌,但它可能會棘手,如果你通過克隆svn回購拉動他們。

+0

我們嘗試了https://github.com/nirvdrum/svn2git(它使用git-svn IIRC),它花了一個多星期的時間進行轉換,多個人在不同的系統上嘗試過(快速xeon服務器,內存中RAM轉換,快速SSD的 - 仍然很慢)。我不想進入轉換主題,但這就是爲什麼我們需要花費25分鐘的時間。 – ideasman42

+0

是的,我們在回購中也有二進制文件,實際上有很多GB,但是我們不打算在git中跟蹤它們,回覆可以忽略它們,我們可以在外部管理它們。 – ideasman42

+0

git中的多個二進制blob會讓你的日常生活變得悲慘。如果可能的話,你肯定會想把它從git中排除。 – mnagel

0

這不是一個明確的答案,只是有些事情我們一直在做檢查git的轉換就可以了。

找到所有提交與父母3+,其不太可能這些都是有效的,但也有例外它在哪裏。

git log --all --min-parents=3 

查找所有提交重複的父母。請注意,運行git filter-branch可以在之後清理它們,但這有時可能是一個非常緩慢的過程。

git log --all --min-parents=2 --format="format:%H: %P" | egrep ':[^:]* ([0-9a-f]+) [^:]*\1' 

查找不合並,不改變任何文件(可能SVN道具變化)所有提交:

git log --all --max-parents=1 --format="format:%H" --shortstat | pcregrep -v -M "^[a-z0-9]+\n " 

感謝朱利安Rivaud爲正則表達式的命令!