2010-02-17 105 views
6

我有一个SVN分支的问题。 我用git checkout -t -b stable svn/stable进行了结算。 然后我做了一个与git rebase master合并。 之后,我试着用git svn dcommitGit:如何在rebase之后提交到​​SVN分支?

提交合并变为远程分支但是现在看来,这混帐推变化到主干而不是分支:(

而且git status告诉我:

# On branch stable 
# Your branch and 'svn/stable' have diverged, 
# and have 218 and 52 different commit(s) each, respectively. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
... 

是否有人知道我做错了什么,以及如何做是正确的?

回答

2

我最近打了同样的错误。问题是,当你变基到高手,第一硬RESE ts当前分支掌握,然后应用合并提交。但是,您的主分支与svn/trunk相关联,因此新重设的分支也与其关联。所以git-svndcommit认为提交时,提交被“插入”到svn/trunk

解决方案是使用git merge --no-ff而不是git rebase。或者使用Subversion本身的合并工具。

+0

嗯,谢谢,我知道要使用git合并的可能性,但随后我就失去其它信息的修订历史和很多东西。 它也可以是一个解决方案,与主分支而不是主分支本身重新分配? – ownking 2010-02-17 18:14:46

+0

@tigerseye,我怀疑这种分支技巧会帮助你。因为与'svn/trunk'关联的提交无论如何都会进入你的分支。 要保持修订历史,您可以与Subversion合并。否则,你只会污染颠覆日志,其他开发人员不会对此感到满意。 – 2010-02-17 18:39:01

+0

我是git的新手,我真的看到了优势,但是在这个充满挑战的步骤中,对于日常挑战来说,感觉有时候太难了。 在git切换器世界中,将开发git分支合并到稳定的SVN分支中是不是一种常见的情况?为什么存在一种常见的方法来执行此操作? – ownking 2010-02-17 21:20:16

0

现在的作品,我没有这样说:

git checkout master 
    git svn rebase 
    git checkout --track -b svn_stable svn/stable 
    git merge --squash master 
    git commit -m "Bring stable up-to-date with trunk" 
    git svn dcommit --dry-run 
    git svn dcommit 

合并是不是与冲突处理底垫容易得多。

在这个尝试中,我忘记使用--no-ff,这会强制每次合并提交,对不对?

感谢您的帮助:)