2010-11-12 158 views
17

我的回購是SVN,我做所有的開發使用Git。我們有一個標準的佈局,我初始化我的本地回購與git svn init -s <url to repo>git-svn如何知道dcommit要分支到哪個分支?

這是我與分公司的工作流程:

# creates a new branch remotely 
git svn branch new-branch-name 

# switches to a branch or trunk locally 
git reset --hard name-of-branch 
git reset --hard trunk 

# merge changes from trunk into a branch 
git reset —hard name-of-branch 
git merge trunk 
git svn dcommit 

最後一個命令上面會更改提交到分支名稱的分支。我的問題是,git如何知道這一點?當我做git reset --hard foo,究竟發生了什麼?

這可能只是回落到大約GIT中的一般問題。每次我嘗試研究一個答案時,我都會對svn整合是否是一種特殊情況感到困惑。

回答

11

git-svn將查找對應於活動SVN分支(與SVN中的分支對應的refs/remotes/...分支)的祖先提交的提交樹。然後它將拒絕承諾。

注意,你不應該合併,然後dcommit - SVN的和Git的分支模型不匹配,而這種事情可以FUBAR你的SVN歷史。當你在分支上時,你應該改爲git rebase trunk。 (另外,git svn rebase。)

此外,要知道的是,你的分支之前檢查出底墊應該是一個地方分支。如果不是,您可以使用git checkout -b local-branch-to-create remote-branch創建一個。然後git rebase trunk

如果你想壁球所有被衍合爲一體了提交,那麼做到這一點底墊後:git reset --soft trunk && git commit

一旦你感到滿意,現在住在行李箱頂部的提交,只是git svn dcommit他們推到SVN服務器。

+0

[1]「git-svn將查找提交樹來提交對應於活動SVN分支的祖先提交,然後將提交給那些提交樹。」 - 有時它猜測錯了 - 有沒有辦法讓我明確指定它? [2]「這種東西可能會讓你的SVN歷史變得模糊 - 所以,歷史將是不合理的,但是代碼文件的合併應該很好,是的? – 2010-11-12 19:49:25

+0

嗯,手冊頁說'--commit-url'應該只用於切換傳輸,並且「非常強烈地勸阻」使用這個選項用於任何其他目的(不要問)。「 – 2010-11-12 19:51:20

+0

如果你想指定一個特定的分支來提交,只需要在你的Git倉庫中相應的遠程分支上重新分配你的特性分支。 – cdhowie 2010-11-12 19:52:13

2

是不是很簡單的創建一個本地分支,跟蹤遠程分支SVN? 當你做一個git svn init --stdlayout url-of-svn-repo,混帳帶來下來整個SVN回購其壓縮,使其可與飯桶。

之後,它僅僅是一個做這樣的事情的事實的事:

git checkout -b mybranch -t remotes/mybranch 

如果你有一個本地分支追蹤遠程分支,git svn dcommit推只跟蹤遠程分支。

+3

我試過這個,'git svn dcommit -n'仍然說它會提交到主幹,而不是我想要的分支 – 2015-09-30 21:30:51

+0

不是那麼容易:「Git通過尋找提示來確定你的dcommits去哪個分支你的歷史中的任何Subversion分支 - 你應該只有一個,它應該是你當前分支歷史中最後一個帶有git-svn-id的分支。「 https://git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client#switching-active-branches-LPtGtkszIW – jgomo3 2016-09-04 23:39:44

1

簡單的方式,如果你想dcommit混帳掌握到SVN主幹,請嘗試以下命令:

git checkout master 
git rebase trunk 
git svn info # To verify that you're on the right branch 
git svn dcommit 

同樣當另一個分支(如6.x中)

git checkout 6.x 
git rebase 6.x # or git rebase remotes/6.x 
git svn info 
git svn dcommit 
相關問題