Git svn 工作流,如何在 git-svn 中创建分支。

3
git version 1.7.3.3

我有一个使用Git的项目。

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

因此,我使用标准布局(主干、分支和标签)将我的项目导入Subversion。

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

进行一些更改,将它们放入暂存区,然后将它们提交到Git。但是,当涉及到SVN时,我有点困惑。首先,我需要rebase以获取来自Subversion的最新更改。然后,我执行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中创建新分支并提交呢?

非常感谢任何建议。


我们公司改变了政策,希望每个人都转换到svn。你很少听到有人朝这个方向发展。他们为什么做出了这个决定? - Tyler
2个回答

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会抱怨(尽管它可以正常工作)。
然后您可以像平常一样工作。

我发现一个避免subversion抱怨相同名称并保持分支名称有序的方法:你可以使用git svn init --prefix=svn/ --stdlayout初始化您的repo。如果您这样做,任何您创建的远程分支都将有svn / <远程分支的名称>的名称。 - Rafael

1
在这种情况下,我会先在subversion中创建分支,因为听起来您想要一个长期的开发分支,稍后将其与/trunk的内容合并。
当我想对/trunk中的内容进行短期修复时,我会像您想要做的那样操作:
git checkout -b add_quick_change

并进行更改。

然后当我想将其放入/trunk时:

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

这应该将所有历史记录复制到主分支,以便在 dcommit 后出现在 Subversion 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接