2012-06-07 32 views
2

這是我的正常工作流程混帳SVN:混帳:更有效的方式來做到這一點

  1. 創建一個分支的一個問題
  2. 做分支一些工作
  3. 結賬主
  4. 後提交
  5. SVN變基
  6. 結帳分支
  7. 底墊主
  8. 結帳主
  9. 合併分支
  10. dcommit

我在這裏的目標是保持在一條直線上我的歷史,同時也試圖儘量減少合併的頭痛。

有沒有辦法用較少的步驟做到這一點?

回答

1

有沒有必要做你的中間rebase,當然不需要交換到主分支這樣做。我的工作流程實現相同的,是這樣的:

  1. 一個問題建立一個新分支:git checkout -b issue remotes/trunk(即remotes/trunk可如果我已經在樹枝上我感興趣的可以省略)。

  2. 做一些工作,並提交它。

  3. 直接推送到Subversion存儲庫:git svn dcommit。如果您編輯的文件已被更改,這隻會失敗。如果他們有,你會得到一個錯誤,所以做一個git svn rebase然後再次嘗試你的git svn dcommit

    請注意,不需要先將它合併到主分支中。

  4. 結帳主分支:git checkout master

  5. 重設主分支:git svn rebase

    (可選)刪除問題分支;主分支和發行分支現在應該是相同的,因爲git svn dcommit之後立即執行git svn rebase

您可以從任何分支執行您的git svn命令;系統將根據Subversion Subversion分支計算出承諾的地點或基準地點。如果你想查看它感興趣的Subversion分支,請運行git svn dcommit --dry-run

特別是,master分支沒有特別的特別之處。事實上,我經常忽略它並跳過上面的步驟4-5。我只是將一個問題分支交換到另一個問題分支,並且從不打擾將主分支帶到Subversion提示。

+0

你是說如果我從主幹克隆,創建一個本地分支,工作和提交,我可以從本地分支重新分配給主幹?我仍然需要改變主人不是嗎? – hvgotcodes

+0

我認爲你描述的場景是有人對遠程Subversion主幹提交了更改,並且你已經提交到本地「問題」分支,並且你想要進行遠程更改。如果你有你的「問題」分支簽出(即'git分支'列出旁邊有一顆星星的「問題」分支),那麼是的,'git svn rebase'會更新,讓你的提交頂部的Subversion中繼。根本不需要觸摸「主」分支。 –

+0

基本上是正確的。我唯一擔心的是如果我一次處理多個問題,全部來自主人。我想我可以單獨改變rebase,並且相信當我合併master時會更新 - 即。合併重新分配給master的分支會導致最新的master - 是否正確? – hvgotcodes

1

你在這裏有兩件事情。爲了保持您的歷史記錄在一條直線上,您需要重新綁定。但是,重新綁定意味着您必須在不同的代碼庫上重新應用更改。這可以引發一連串的衝突解決方案,您可能需要爲每個承諾進行單次提交

我可以添加的唯一幫助就是,如果您已經重新組裝,則會知道您將會進行快速合併。在這種情況下,您不需要檢出該分支以將其向前移動。因此,要更新的參考,您可以:

git push . my-branch:master 

這將更新主人爲指向我的分支指向如果它的快速轉發纔會工作。不幸的是,這不會幫助你,因爲你需要在分支上做你需要的操作。

回到您的工作流程問題,與衝突問題相比,您會遇到更多問題。

+0

在這個工作流程中,步驟3-4應該永遠不會有合併問題,因爲我的主人沒有改變。對?所以可能會有6合併,但會有8合併。如果我剛剛合併,有衝突的可能性 - 我想我說的是最多應該有一個衝突 – hvgotcodes

1

你可以試試SubGit而不是git-svn。

SubGit是一個服務器端解決方案。它允許Git訪問Subversion存儲庫以及Subversion訪問Git存儲庫。一個人必須SubGit安裝到Subversion版本庫,即基本上添加必要的掛鉤,做的每推轉換和承諾:

$ subgit configure $SVN_REPOS 
$ # Adjust $SVN_REPOS/conf/subgit.conf 
$ #  to specify your branches and tags 
$ # Adjust $SVN_REPOS/conf/authors.txt 
$ #  to introduce svn author names to their git counterparts 
$ subgit install $SVN_REPOS 

之後,一個具有$ SVN_REPOS/git的一個Git倉庫被連續以其顛覆同步對口。當爲此Git存儲庫配置遠程訪問時(例如,通過git-http-backend),可以將任何Git工作流程和任何Git客戶端與現有的Subversion存儲庫配合使用。

對於你的情況是這樣的:

$ git checkout -b foo 
$ git commit 
$ git checkout master 
$ git merge foo or git rebase foo 
$ git push 

更多的細節:

  • SubGit是遠比更加優越的合併跟蹤方面混帳SVN,最終OF-線,MIME類型的支持等;
  • SubGit是一個帶有一些免費選項的商業工具;
  • 我是SubGit開發人員之一。
相關問題