Git svn工作流程,在git-svn中创建分支

时间:2010-12-20 15:50:48

标签: svn git git-svn

git version 1.7.3.3

我有一个使用git的项目。

我们公司改变了政策,希望每个人都切换到svn。

所以我使用标准布局(主干,分支和标签)在subversion中导入了我的项目。

所以我目前的工作流程如下:

进行一些更改,将它们放在暂存区域中,然后将它们提交给git。但是,当涉及到svn时,我有点困惑。首先,我决定从颠覆中获取最新的变化。然后我做了一个dcommit。

暂存更改文件

git stage app_driver.c

将它们提交给git

git commit -m"Added some changes"

从svn获取最新更改

git svn rebase

将我最新的更改提交给svn

git svn dcommit

将更改推送到我的git存储库

git push upstream my_project

但是,当我在git中创建一个新分支时,真正的混乱就出现了,以及我如何在subversion中提交该分支。

git checkout -b add_new_feature

然后如何在svn中创建新分支并提交它?

非常感谢任何建议,

2 个答案:

答案 0 :(得分:3)

我通常使用svn copy在subversion中创建一个分支。

例如,假设我的行李箱在 https://svnserver/svn/MyProject/trunk我希望在https://svnserver/svn/MyProject/branches/my-branch中创建一个分支,我会这样做:

svn copy https://svnserver/svn/MyProject/trunk https://svnserver/svn/MyProject/branches/my-branch

好的,这可以摆脱创建svn分支,但是用git获取这个分支我会去我的目录并做一个git svn fetch。这将从svn获取内容但不会修改您当前的分支。

如果您使用git svn init --stdlayout启动项目,则在执行git branch -r时将显示您的分支。然后你可以用这样的东西结账:

git checkout -b my_local_branch_name my_remote_branch_name

注意:不要为本地分支和远程分支使用相同的名称,否则git会抱怨(虽然它有效。)

然后你就可以正常工作了。

答案 1 :(得分:1)

在这种情况下,我首先在subversion中创建分支,因为听起来你想要一个长期开发分支,稍后将其与/ trunk的内容合并。

当我想对/ trunk中的任何内容进行短期修复时,我会按照您的意愿执行操作:

git checkout -b add_quick_change

然后改变。

然后当我想把它放在/ trunk中时:

git checkout master
git pull --no-squash . add_quick_change
git svn dcommit

这应该将所有历史记录复制到master中,以便在dcommit之后以subversion结束。