2014-09-02 71 views
2

(1)如何將兩個subversion repos(其中一個是另一個的外部對象)轉換爲git上的單個git repo?我希望歷史是交錯的,這樣gitk輸出纔有意義! (2)爲什麼我要使用svnadmin轉儲,而不是僅僅使用git clone,然後移動它們?將googlecode上的兩個subversion repos轉換爲github上的單個git repo

(3)如何測試我的新存儲庫以查看它是否與舊的存儲庫對匹配?

爲了回答問題,假設兩個subversion版本庫位於http://acl2-devel.googlecode.com/svnhttp://acl2-books.googlecode.com/svn,並且這兩個存儲庫都使用標準svn佈局(trunk,branches,tags)進行設置。此外,假設我想要一個乾淨的休息,並希望爲分支和標籤重新開始。

回答

1

(1)以下是我爲將兩個回購合併到一個git回購庫所做的元級討論。

  • 轉儲使用svnsync的和svnadmin的
  • 既顛覆庫創建一個新的svn庫與書籍回購安裝在本本 子目錄
  • 取下SVN倉庫中的所有分支和標籤(但在離開 他們的歷史)
  • 轉換將svn與git,電子郵件進行規範化匹配的github 帳戶的電子郵件地址
  • 刪除使用到歷史分支和標籤的所有引用「BFG 「
  • ‘改寫’git的歷史 多年前容納從內部服務器的舉動時,ACL2系統主幹達根的移動,並 的書籍上升了一個層次
  • 創建一個新的移動回購和「摘櫻桃」的4000+承諾爲了 時間戳創造一個很好的排序歷史
  • 推導致回購協議Github上

實現上述長和可用的腳本: https://github.com/ragerdl/svn-to-git/blob/master/convert-acl2-books-svn-and-acl2-devel-svn-to-git.sh

(2)爲什麼不在兩個存儲庫上使用git svn clone然後合併它們?

因爲,當我進入櫻桃選擇階段時,發生了很多衝突。按此順序執行它可避免這些衝突。 (3)您可以通過確保對於您關心的每個擴展來測試您的存儲庫,每個擴展的計數在兩個存儲庫中都是相同的。您也可以執行差異。有關執行這些操作的腳本,請參見https://github.com/ragerdl/svn-to-git/blob/master/quality-assurance.sh

我意識到複製+粘貼代碼會很好,但是有這麼多,這是我的第一次剪切。如果其他人想清理我編寫的腳本並將其粘貼到此處,我們將不勝感激。我不認爲這是一個真正的社會增值,除非我花了很多時間閱讀別人的帖子,而且我也找不到這個問題的答案。因此,我認爲這個答案應該放在搜索引擎容易找到的地方。

相關問題