2011-08-29 76 views
4

這是我目前的git-svn的工作流程:git-svn:我如何避免'合併分支<branchname>'提交消息?

git checkout -b feature master 
# hack commit hack commit 
git checkout master 
git svn rebase 
git merge feature 
git svn dcommit 

這通常工作正常,在後備箱從本地分支的所有提交,而唯一的Git回放「數據丟失」的原始提交的時間戳,沒有大不了。

但看起來像今天有什麼不同的合併和dcommit,導致SVN回購提交消息只是「合併分支」功能'「,也許是因爲功能是'小',只有2或3次提交。

我該如何避免這種情況發生,並確保所有提交和提交消息從git重播SVN回購?

回答

1

這番話應該是一個混帳合併的dcommit的結果,如圖「Is git-svn dcommit after merging in git dangerous?‘:

(master)$> git log --graph --oneline --decorate 
* 56a779b (work, master) Merge branch 'work' 
|\ 
| * af6f7ae msg 3 
| * 8750643 msg 2 
| * 08464ae msg 1 
|/ 
* 21e20fa (git-svn) last svn commit 

換句話說,如果這三個’msgx」提交了上主直接完成,他們會在svn方面重播(有他們原來的評論)。
但是在這裏,只有得到的合併提交被重播,並帶有「通用」評論。

+0

好吧,我想我知道了,但它仍然沒有回答我如何將這個特性合併到master中,以確保master將接收所有提交而不是合併「合併分支」提交。我應該從功能變爲主而不是合併? – dipnlik

+1

@dipnlik:如果你想重播從'feature'到'master'的所有提交,那麼是的,rebase是一個選項(只要你知道重定分支的風險,你可能已經推送到其他遠程Git倉庫,其他的已經被克隆了,其風險與git-svn無關:請參閱「[從上游重新啓動](http://kernel.org/pub/software/scm/git/docs/git-rebase.html #_recovering_from_upstream_rebase)」 – VonC

0

您將需要從特徵支路的第一變基:

git checkout feature 
git rebase master 

這可確保當你融入你的主人,你只能得到一個快進,而不是實際的合併。

我的流量通常更像是這樣的:

git checkout master 
git svn rebase 
git checkout feature 
<hack...hack...hack> 
git commit 
git rebase master 
git checkout master 
git merge feature 

我只是要確保做一個SVN底墊,然後重訂我的所有特性分支,以保持一切美好的事物和線性的是SVN喜歡這樣的方式。

此外,如果您不知道它,則有git svn dcommit --dry-run選項。我總是使用--dry-run並計算提交次數以確保git-svn將實現我所期望的。

相關問題