我正在测试 SubGit 作为从 SVN 迁移到 Git 的一种方式。
我想做的是能够在 git 存储库中创建所有用户都可以使用的远程分支,不会同步回 SVN。
我只希望 SubGit 跟踪 master 分支并将其同步回 SVN,以便我们可以自由使用和共享其他 Git 分支。
有没有简单的方法可以做到这一点?
谢谢
最佳答案
理想的解决方案是在 SubGit configuration 中指定 trunk:refs/heads/master 映射, 因此 SubGit 将同步 trunk 与 master 忽略任何其他分支。
不幸的是,SubGit 目前至少需要一个分支映射(版本 1.0.x 和 2.0.x)。也就是说,必须指定如下内容:
trunk = trunk:refs/heads/master
branches = branches/*:refs/heads/*
shelves = shelves/*:refs/shelves/*
tags = tags/*:refs/tags/*
由于您不打算同步所有 Git 分支,请考虑使用一些特殊的命名空间来解决此问题:
trunk = trunk:refs/heads/master
branches = branches/*:refs/gitsvn/heads/*
...
因此,如果将 master 分支推送到中央 Git 存储库,它会被转换为 trunk。但是,如果推送分支 foo,SubGit 会忽略该分支,因为 refs/heads/foo 不在同步范围内。
麻烦来自 merge 提交:如果提交 A 是 merge 分支 foo 到 master 的结果,那么 SubGit 会创建 branches/foo在提交 A 的相应父级的 Subversion 端。如果您不希望将 SubGit 生成的分支包含到 *branches/** 命名空间中,请考虑在 Subversion 端也使用一些特殊分支:
trunk = trunk:refs/heads/master
branches = gitsvn/branches/*:refs/gitsvn/heads/*
shelves = shelves/*:refs/shelves/*
tags = gitsvn/tags/*:refs/gitsvn/tags/*
在这种情况下,应将提交 A 的同一父级发送到 gitsvn/branches/foo 分支。
这是目前可用的最佳解决方案。我们还有 2.1 版的功能请求,可以为您提供理想的解决方案,但我们需要一些时间才能实现它。
SubGit 3.0 更新:
从 3.0.0 版本开始(目前处于早期访问阶段,下载地址 http://subgit.com/eap )SubGit 支持单分支布局,因此配置文件可能如下所示:
没有主干,没有分支,没有标签,没有架子:
[svn] url = http://host.com/repos/project
在这种情况下,project 目录直接映射到 Git 存储库中的 master 分支; SubGit 忽略任何其他分支并且从不创建架子,这意味着匿名 Git 分支不会同步到 SVN。
单行李箱,无货架:
[svn] url = http://host.com/repos/project trunk = trunk:refs/heads/master
在这种情况下,project/trunk 目录映射到 Git 存储库中的 master 分支; SubGit 忽略任何其他分支并且从不创建书架。
带搁板的单行李箱:
[svn] url = http://host.com/repos/project trunk = trunk:refs/heads/master shelves = shelves/*:refs/shelves/*
在这种情况下,project/trunk 目录映射到 Git 存储库中的 master 分支; SubGit 忽略任何其他分支,但它会将匿名分支转换为搁置,默认情况下是版本 1.0.x 和 2.0.x。
希望对您有所帮助。
关于git - SubGit:如何排除分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16588228/