使用带有-s
选项(git svn clone http://server/repo -s
)的git-svn克隆SVN存储库后,如何创建分支或标记并将其推送到存储库中的相关分支/标记目录dcommit
ING?
例如;如果我要使用git在本地创建foobar
分支(git checkout -b foobar
)我怎样才能在服务器上使用git-svn 创建分支(http://server/repo/branches/foobar
) ?
我正在使用Git 1.5.5.6。
请注意:
由于没有git svn branch
方法,下面接受的方法不适用于Git 1.5.5.6 。我仍然在寻找一种解决方案,不涉及直接使用svn。
答案 0 :(得分:71)
您可以阅读此tutorial中的所有细节,但要点基本上如下:
$ git svn branch -m "Topic branch" my_topic # Create SVN branch called "my_topic"
$ git checkout --track -b my-topic remotes/my_topic # Create the Git branch for "my_topic"
# Hack hack hack...
$ git svn dcommit --dry-run # Make sure you're committing to the right SVN branch
$ git svn dcommit # Commit changes to "my_topic" branch in SVN
答案 1 :(得分:54)
如果您在subversion分支存在之前创建了本地分支,并且您现在想要将本地分支推送到subversion分支,则可以执行以下操作:
获取分配给本地分支的svn分支修订
$ git svn info
,URL
字段将是当前的svn分支路径,Revision
字段将是颠覆修订号
从您创建本地分支的修订版中创建svn分支
$ svn cp http://svn-repo/my_app/trunk@123 http://svn-repo/my_app/branches/feature1
获取新的svn分支,以便你的git repo知道它
$ git svn fetch
现在应该将svn分支添加为git仓库中的远程分支
$ git branch -a
* feature1
master
remotes/feature1
此时你的遥控器仍然是后备箱。您需要将本地分支指向新的远程分支。您可以通过从远程分支重新定位本地分支来执行此操作:
$ git rebase remotes/feature1
现在您的本地分支引用了您的远程分支,您可以将更改提交到它。首先进行干运行,以确保您的更改将进入远程分支:
$ git svn dcommit --dry-run
Commiting to http://svn-repo/my_app/branches/feature1
现在您可以提交对远程分支的更改
$ git svn dcommit
大多数操作方法会告诉您先分支subversion,然后创建一个跟踪远程分支的本地分支。但我经常不提前决定我的本地分支机构是否应该跟踪远程分支。通常我在本地分支,并且无需推送到远程分支进行更改。如果我后来决定将我的本地分支提交到远程分支,我执行上述步骤。
答案 2 :(得分:0)
我只是想指出你不应该从你已经拥有的其他git分支中的东西中重新绑定到你最近创建的分支。然后git svn dcommit将推送到主干似乎。至少这对我来说是一个问题。
相反,如果你想将旧的git分支中的更改提取到这个新的svn分支上,请使用例如樱桃挑选。