2010-11-12 162 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 
相关问题