如何让git-svn使用特定的svn分支作为远程仓库?

61
警告:我对git完全是新手。我的团队使用svn中的功能分支,我想使用git-svn来跟踪我在特定功能分支上的工作。我已经(大致)按照Andy Delcambre的帖子设置了本地git存储库,但这些说明似乎导致git选择最近更改的svn分支作为远程存储库;问题在于那不是我关心的分支。我如何控制git-svn使用哪个分支?或者我完全错了吗?
更新:我确实使用了-T-b-t选项(在我的情况下,因为svn仓库有多个项目,但我只想让git仓库包含我正在工作的项目)。
4个回答

60

感谢Bart's Blog提供这个有用的SVN分支在Git中的参考。显然,创建git分支时只需指定远程分支即可,例如:

git checkout -b git-topic-branch-foo foo

其中foo是远程分支的名称。


9
如果您已经创建了自己的 git 分支,您也可以使用 git rebase 命令将其变基到 svn 分支上。 - rampion
谢谢,这似乎是让 git 以非分离状态检出分支的唯一方法。 - Shadow Man
4
Bart博客已经存档在archive.org上:https://web.archive.org/web/20130119234635/http://www.jukie.net/~bart/blog/svn-branches-in-git - Reid Ellis
现在甚至Bart的博客存档也已经损坏了。 - Jim L.
1
@Tom OP的问题假定存在一个已有的svn分支。如果你想创建一个空的svn分支,请使用 git svn branch $BRANCHNAME。请注意,并不是所有本地的git分支都需要对应一个远程的svn分支,只需要那些你希望共享的分支即可。 - rampion
显示剩余2条评论

30

你也可以参考这个链接:git-svn is a gateway drug - robby on rails

当我需要确保我的本地分支指向正确的远程svn分支时,我使用了类似于以下的命令:

git branch -r

我想要获取正在追踪的远程分支的名称。然后

git reset --hard remotes/svn-branch-name

如何显式地将本地分支指向不同的远程分支。


1
这是一种手动的过程,用于强制本地分支更新到远程svn分支的当前状态。我所理解的问题更多涉及git的远程跟踪功能以及配置git自动远程跟踪SVN中特定的分支。 - David Alpert

10
我需要先运行 'git svn fetch',因为我想关联的分支是在我的 git 客户端之后创建的。

谢谢这个提示,顺便提一下,如果你想查看远程仓库,可以在.git/svn/refs/remotes目录下找到。如果有新的远程仓库,在运行'git svn fetch'之后,它应该会出现在那里。 - Alper Akture
注意不要在.git目录中随意查看,里面的内容可能会发生变化。特别是,引用(refs)有时会被打包在packed-refs文件中,尤其是它们很少更改,并且即使存在也不会显示为loose。git show-ref命令可以更好地解决这个问题,而git branch -r命令甚至可以做得更好。 - ComputerDruid
1
如果你运行get checkout -b git-topic-branch-name remote-branch-name,并且收到fatal: git checkout: updating paths is incompatible with switching branches.的错误信息, 那么运行git branch -r,如果你没有看到该分支,则需要运行git svn fetch。(git svn rebase无法拉取新分支,但git svn fetch可以) - Stan Kurdziel

1

我使用git-svn,但我没有使用与SVN分支相互操作的功能。话虽如此,我注意到你所遵循的教程没有使用{{link1:-T,-b,-t}}选项来初始化git svn。这些选项告诉git-svn上游主干/分支/标签目录的名称,这在您的情况下可能很重要。


谢谢,Greg。不幸的是,这就是我设置和博客中的设置之间的区别。 - Hank Gay

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