2010-12-06 76 views
9

我正在試驗git-svn,並試圖想出一個相對不容易出錯的工作流程。我認爲以下應該工作,並且非常簡單,但我見過people using far more complicated workflows,所以我想看看爲什麼。這個git-svn工作流程是否工作?

  1. (master) $ git svn init <path>
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase
  4. (master) $ git checkout -b topic-branch
  5. (topic-branch) $ # HACK HACK COMMIT HACK HACK HACK COMMIT HACK COMMIT
  6. (topic-branch) $ git checkout master
  7. (master) $ git merge topic-branch - 這是一個快進合併,所以沒有合併提交
  8. (master) $ git svn rebase
  9. (master) $ # fix conflicts
  10. (master) $ git svn dcommit
  11. GOTO 4
+0

相關:http://stackoverflow.com/questions/1129688/git-svn-workflow-feature-branches-and-merge – cregox 2011-02-14 20:16:15

回答

5

是的,這基本上是與Subversion版本庫工作時我做什麼。簡單的關鍵在於讓Git分支保持本地化,而不是試圖將它們映射到Subversion分支。

我剛剛注意到,你直接鏈接到我在另一個問題上的答案。所以也許我應該多解釋一下。 :)

我有時在主題分支中執行衝突解決方案,如果我期望有一些衝突的工作。否則,如果我不期望有很多衝突,我可能會先合併,然後再做git svn rebase。這並不重要。

關鍵的一點是,Git非常靈活,所以最低工作流程非常簡單。你已經添加了一個主題分支;我已經在主題分支上添加了rebasing。

0

如果您在執行步驟時安全無慮5永遠不要切換到master並執行「git svn rebase」。否則,我會建議在第5步和第6步之間做一個「git rebase master」。

2

從我的短暫經歷,我做了細微的調整,以您的工作流程,並添加註釋:

  1. (master) $ git svn init <path>(或(master) git svn clone <url>
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase(開始循環,化解矛盾)
  4. (master) $ git checkout -B topic-branch小心之前做這個)
  5. (topic-branch) ## HACK HACK COMMIT HACK COMMIT(使用第三方)
  6. (topic-branch) $ git checkout master
  7. (master) $ git rebase topic-branch(解決衝突)
  8. (master) $ git svn rebase(解決衝突,如果有的話)
  9. (master) $ git svn dcommit小心讀這裏)
  10. GOTO 3(或4,如果無需再次變形)

我正在使用主人分支只是爲了與SVN集成和做所有的工作主題分支,就像我相信你是。我希望這樣做更有意義,因爲即使它基本上是我想要的 - 我顯然無法使用您的工作流程! :-)在調整

更多細節所做的:

  • 重視資本-B的步驟4,將重置話題分支所以它總是從當前SVN新。沒有它的循環會打破給出一個錯誤「分支已經存在」。
  • 步驟7使用rebase而不是merge。是的,它可能是一個快速前進的合併,但它比對不起更安全。如果在步驟6和步驟7之間做了某些事情,則可以拍照。
  • 循環播放到3而不是4播放。另外,只是爲了安全起見。似乎使用svn rebase永遠不會是一種濫用,因爲它總是在主上完成,所以總是有分支作爲備份。