git-svn如何知道dcommit到哪个分支?

Joh*_*hir 17 svn git git-svn

我的回购是SVN,我用git进行所有开发.我们有一个标准的布局,我用我的初始化我的本地回购git svn init -s <url to repo>

这是我使用分支机构的工作流程:

# 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
Run Code Online (Sandbox Code Playgroud)

上面的最后一个命令将提交对分支名称分支的更改.我的问题是,git如何知道这一点?当我做git时reset --hard foo,到底发生了什么?

这可能只是关于git的一般性问题.每次我尝试研究回答我弄不清楚,如果SVN一体化是一个特例与否.

cdh*_*wie 11

git-svn将查找与活动SVN分支(与SVN中的refs/remotes/...分支对应的分支)对应的祖先提交的提交树.然后它会向那些人提出.

请注意,您不应该合并然后再提交 - SVN和Git的分支模型不匹配,这种事情可能会影响您的SVN历史记录.你应该git rebase trunk在分支机构时.(或者,git svn rebase.)

另外,请注意,您在rebase之前签出的分支应该是本地分支.如果不是,您可以创建一个git checkout -b local-branch-to-create remote-branch.然后git rebase trunk.

如果你想将所有重新提交的提交压缩成一个,那么在rebase之后执行以下操作:git reset --soft trunk && git commit.

一旦您对现在位于主干上的提交感到满意,只需git svn dcommit将它们推送到SVN服务器即可.