Subgit:避免将git分支同步到svn

3
我正在尝试使用SubGit,但我在分支方面遇到了问题:我希望在Git下创建的分支仅在Git中存在。我找到了这个:SubGit:如何排除分支?,但它说:

问题来自合并提交:如果提交A是将分支foo合并到主分支中的结果,则SubGit会为提交A的相应父级在Subversion侧创建分支/foo。如果你不想将SubGit生成的分支包含在branches/*命名空间中,请考虑在Subversion侧使用一些特殊的分支。

我不想动SVN,因为我正在评估Subgit,我不想改变SVN上的任何内容。我想我可以通过在推送到Git存储库之前重新定位来达到我的目标(即仅提交合并历史而不是git分支到SVN),但我担心这会导致提交回SVN时出现冲突。有什么办法可以解决这个问题,而不必等待SubGit 2.1版本(声称可以做我想要的事情,但不会很快实现-从链接的答案中引用:我们需要一些时间才能实现它)?
1个回答

5
SubGit只同步在SubGit配置文件中指定的分支。默认情况下,它们是:
    trunk = trunk:refs/heads/master
    branches = branches/*:refs/heads/*
    shelves = shelves/*:refs/shelves/*
    tags = tags/*:refs/tags/*

如果您使用另一个命名空间,例如refs/heads/nosync/*,其中的分支将不会同步。

或者您可以使用refs/heads/*来处理正常的分支(不进行同步),并设置特殊的refs/heads/sync/*命名空间来进行同步:

    trunk = trunk:refs/heads/sync/master
    branches = branches/*:refs/heads/sync/*
    shelves = shelves/*:refs/shelves/*
    tags = tags/*:refs/tags/sync/*

请注意,长分支名称(例如refs/heads/sync/master)并不会导致不便,因为在克隆此Git存储库后,您可以分配自己的本地refs/heads/*分支与短名称来跟踪来自一个或另一个名称空间的长名称分支。这就是为什么我认为这对您是一个好的解决方案。

实际上,昨天我尝试了这个解决方案(它反映了我已经找到的解决方案),并注意到合并提交并不成问题,这意味着它们不会导致subgit将“特殊分支命名空间”同步到svn。因此,这绝对是我一直在寻找的解决方案。谢谢! - ThanksForAllTheFish
也许我漏掉了什么,但在你的示例代码块中,分支应该有 nosync 而不是 sync,对吗? - Jon Cage
该块是正确的,refs/heads/*没有被提及,因此它们没有被同步; refs/heads/sync/*被提及,因此它们被同步。 - Dmitry Pavlenko
啊,我现在明白了。我错过了Git中创建本地分支的重点,这些分支位于refs/heads//*,由于只有映射到'/refs/heads/sync'下的位元才会相对于SVN进行跟踪,因此仅限于Git的分支将不会与SVN同步。看起来是一个相当简洁的解决方案 - 谢谢! - Jon Cage
您是否有在克隆subgit存储库时创建具有短名称的refs的示例? - Jon Cage
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Dmitry Pavlenko

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