2012-05-09 153 views
3

我在一個使用SVN作爲版本控制的大團隊。與主svn倉庫使用git-svn的git工作流程

我在一個大團隊的小組中試圖使用git進行這個小組代碼的集成測試。

以下是我們想爲dailay工作做的事情。

  1. A,B,C(小組中的人)完成他們的編碼工作。
  2. A,B,C檢查工作到git分支integration-test
  3. 將最新更改從SVN trunk更改爲integration-test
  4. 構建映像並執行集成測試。
  5. 測試通過,A,B,C檢查他們的代碼爲 'SVN'
  6. 轉到第1步

的問題是:因爲我們的改變已經提交到Git的分支integration-test在步驟2中。並且我們在步驟5中對SVN進行了更改。因此,在下一輪的第3步中,合併對所有更改都會產生衝突。

那麼,對於這種情況是否有一個好的做法?

回答

5

你會遇到的一個問題是git svn rebase實際上會重寫git倉庫的提交歷史記錄。這將與任何人從該回購協議中產生衝突。最好的解決方案是每個人都可以自己到git svn svn倉庫。

如果你想建立一個遠程回購所以你可以共享分支,那麼每個人將只需要知道,如果遠程的Git分支復位至SVN,他們將不得不強制應用新的修訂歷史記錄他們的地方git回購。

其他人可以通過使用git pull --force強制他們的本地回購配對遙控器。雖然被警告,但是因爲這會使修改點之後的任何提交失效。例如,假設我們有以下提交結構:

 
     D----E topic 
    /
A----B----C----F master 

然後我們使用git pull --force更新我們的本地倉庫,然後改變提交的開始B的SHA1。我們的新的結構將類似於如下:

 
     D----E topic 

A----G----H----I master 

注意如何提交DE現在浮在奇蹟的土地?這是因爲分支點現在不再匹配B,而現在是G

要解決此問題,您需要確保您的本地分支點來自不會因運行git svn rebase而被更改的提交。在拉動遙控器之後,您可以將您的本地分支git rebase更新到更新遠程分支。

假設我們犯了一個錯誤,即從提交點創建一個分支,導致上述的浮動仙境。那麼,在你發起一個git pull --force之前,你必須揮動混亂的魔杖。像這樣:

糟糕。 B將在pull中被覆蓋。

 
     D----E topic 
    /
A----B----C----F master 

好了,那麼我們只需要git rebase A topic上承諾,將不會改變我們的變化。

 
    D'---E' topic 
/
A----B----C----F master 

然後,一旦變化已經來了,我們可以git rebase G topic,讓我們變回我們知道他們去。

 
     D'---E' topic 
    /
A----G----H----I master 

希望這解釋了嘗試運行中央訪問git回購一邊svn回購的痛苦。

+0

謝謝。如何將「新修訂歷史」應用於本地回購? – Rocky

+1

'git pull --force'將強制本地回購接受遠程更改。 **被警告**:在重寫點之後存在的任何本地提交將無效。如果這沒有意義,那麼我會用更深入的解釋來編輯我的答案。 –

+0

「無效」是什麼意思?失去改變? – Rocky