這是我的正常工作流程混帳SVN:混帳:更有效的方式來做到這一點
- 創建一個分支的一個問題
- 做分支一些工作
- 結賬主 後提交
- SVN變基
- 結帳分支
- 底墊主
- 結帳主
- 合併分支
- dcommit
我在這裏的目標是保持在一條直線上我的歷史,同時也試圖儘量減少合併的頭痛。
有沒有辦法用較少的步驟做到這一點?
這是我的正常工作流程混帳SVN:混帳:更有效的方式來做到這一點
我在這裏的目標是保持在一條直線上我的歷史,同時也試圖儘量減少合併的頭痛。
有沒有辦法用較少的步驟做到這一點?
有沒有必要做你的中間rebase,當然不需要交換到主分支這樣做。我的工作流程實現相同的,是這樣的:
一個問題建立一個新分支:git checkout -b issue remotes/trunk
(即remotes/trunk
可如果我已經在樹枝上我感興趣的可以省略)。
做一些工作,並提交它。
直接推送到Subversion存儲庫:git svn dcommit
。如果您編輯的文件已被更改,這隻會失敗。如果他們有,你會得到一個錯誤,所以做一個git svn rebase
然後再次嘗試你的git svn dcommit
。
請注意,不需要先將它合併到主分支中。
結帳主分支:git checkout master
。
重設主分支:git svn rebase
。
(可選)刪除問題分支;主分支和發行分支現在應該是相同的,因爲git svn dcommit
之後立即執行git svn rebase
。
您可以從任何分支執行您的git svn
命令;系統將根據Subversion Subversion分支計算出承諾的地點或基準地點。如果你想查看它感興趣的Subversion分支,請運行git svn dcommit --dry-run
特別是,master分支沒有特別的特別之處。事實上,我經常忽略它並跳過上面的步驟4-5。我只是將一個問題分支交換到另一個問題分支,並且從不打擾將主分支帶到Subversion提示。
你在這裏有兩件事情。爲了保持您的歷史記錄在一條直線上,您需要重新綁定。但是,重新綁定意味着您必須在不同的代碼庫上重新應用更改。這可以引發一連串的衝突解決方案,您可能需要爲每個承諾進行單次提交。
我可以添加的唯一幫助就是,如果您已經重新組裝,則會知道您將會進行快速合併。在這種情況下,您不需要檢出該分支以將其向前移動。因此,要更新的參考,您可以:
git push . my-branch:master
這將更新主人爲指向我的分支指向如果它的快速轉發纔會工作。不幸的是,這不會幫助你,因爲你需要在分支上做你需要的操作。
回到您的工作流程問題,與衝突問題相比,您會遇到更多問題。
在這個工作流程中,步驟3-4應該永遠不會有合併問題,因爲我的主人沒有改變。對?所以可能會有6合併,但會有8合併。如果我剛剛合併,有衝突的可能性 - 我想我說的是最多應該有一個衝突 – hvgotcodes
你可以試試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
更多的細節:
你是說如果我從主幹克隆,創建一個本地分支,工作和提交,我可以從本地分支重新分配給主幹?我仍然需要改變主人不是嗎? – hvgotcodes
我認爲你描述的場景是有人對遠程Subversion主幹提交了更改,並且你已經提交到本地「問題」分支,並且你想要進行遠程更改。如果你有你的「問題」分支簽出(即'git分支'列出旁邊有一顆星星的「問題」分支),那麼是的,'git svn rebase'會更新,讓你的提交頂部的Subversion中繼。根本不需要觸摸「主」分支。 –
基本上是正確的。我唯一擔心的是如果我一次處理多個問題,全部來自主人。我想我可以單獨改變rebase,並且相信當我合併master時會更新 - 即。合併重新分配給master的分支會導致最新的master - 是否正確? – hvgotcodes