2011-10-15 77 views
7

在工作中,我們目前使用Subversion for SCM。我建立了一個本地git-svn鏡像,並將其用作我的主要開發工作空間。我現在對基本功能感到滿意。團隊中的其他開發人員也希望轉移到Git,因此我們正在考慮使用svn存儲庫的git鏡像。我還想和Gerrit一起嘗試這個練習。使用Subversion版本庫的Git鏡像設置Gerrit

我想象的設置是沿着這些路線的東西:

  1. 一個Git鏡的svn庫。這個主分支與svn上的主幹同步。

  2. 對於每個功能都創建主題分支。這與發生審查的Gerrit有關。一旦變更集被批准,Gerrit將主題分支後臺主合併。

  3. 一個gitweb或類似的web應用程序在瀏覽器上查看存儲庫。

  4. 一個類似的過程,其他分支在顛覆以外的主幹。

本質上,我想要的是我只與我的本地git克隆和Gerrit webapp交互;將審查過的變化推回到svn應該會自動發生。我該如何設置類似的東西?

+0

誰會處理將變更推回到Subversion時發生的衝突? –

+0

@Greg Hewgill Ahem,我假設當Gerrit嘗試將更改合併到主分支時,它應該失敗。 :-) –

+0

嘿,我試圖做類似的事情,儘管我只需要備份我的git分支而不必將它們轉換爲SVN分支。非常困惑,反覆詢問我的密碼'git push',直到我注意到我忘記在服務器引用的開始處放置ssh://! –

回答

2

有可能設置一個Git一面鏡子,在同步與存儲庫SVN

安裝SubGit到你的SVN倉庫:

$ subgit install path/to/svn/repository 

然後,只需設置訪問創建鏈接的Git倉庫(路徑/到/ svn/repository/.git)使用Apache或其他。對Git存儲庫的每次推送都將被轉換爲SVN修訂版本,反之亦然。

所以你可以在Gerrit和你團隊中使用鏈接的Git倉庫(就像SVN從不存在一樣)。之後,你可以關閉SVN倉庫(或繼續使用)。在關閉運行之前停止同步:

$ subgit uninstall path/to/svn/repository 
6

不幸的是,不可能自動完成這一切(至少不是沒有很多工作)。這裏有一些步驟,可以讓你接近:

  1. 設置您的git克隆格里特服務器
  2. 創建SVN鉤或週期性的任務,它從SVN獲取並推送至git克隆上
  3. 格里特有一個內置的GitWeb的版本,所以你有覆蓋
  4. 在格里特服務器,創建change merged hook當第4步失敗的事情西港島線,這將推動回SVN

像格雷格上面提到的,我很棘手。您必須重置Gerrit中的git存儲庫以匹配svn並重新提交您的更改。如果/當你說服其他團隊放棄svn並使用git/Gerrit時,這將會容易得多:-)

祝你好運!