如何使用Git SVN仅跟踪分支?

时间:2010-12-08 11:07:48

标签: svn git

我正在使用一个非常庞大的Subversion存储库,它具有相当混乱的历史记录。它有一个标准的目录布局,但出于另一个原因,我无法使用git svn clone克隆它。离开它运行了大约2天后,似乎进入了一个无限循环,所以我放弃了克隆完整的存储库。

存储库有一个主要开发分支 / branchs / dev 以及该分支之外的许多功能分支。我想做的只是跟踪开发分支和功能分支,使用git的分支跟踪开发,每个功能分支一个常规的git远程分支。

到目前为止,我一直在为dev分支和每个功能分支创建单独的Git存储库。我只从每个分支中获取最后n个提交,因为我没有看到需要全部获取它们(加上'dev'分支不直接来自'trunk',即使理论上它应该)。这是我用过的......

$ git svn init <full svn branch url> <dir name>
$ cd <dir name> 
$ git svn fetch -r <start rev>:HEAD (where <start rev> is either the last or some recent commit on the branch)

使用此方法可以使每个分支在隔离状态下运行良好,但这意味着我无法使用git从dev向下合并到功能分支,反之亦然。

如何使用Git仅在一个存储库中跟踪'dev'和功能分支?

1 个答案:

答案 0 :(得分:1)

我没有机会尝试这一点,但是git svn clone允许您使用--trunk=选项指定主干目录,使用--branches=指定分支,因此您应该能够做点什么

git svn clone --trunk=branches/dev --branches=branches/dev/features http://svn.foo.com/svn/project

或者你的设置是。 git-svn man page还声明您可以使用多个--branches代码,以防您的所有分支都不属于同一个目录。

编辑:为了澄清,这将只检查你指定为trunk的任何内容,并将它作为你的主分支在git仓库中。如果您想使用其他功能分支之一,则可以执行

git checkout -b local/branch_name remote_branch_name

获得该分支。 --branches=的{​​{1}}选项告诉git在执行上述命令时查找分支的位置。