git - SubGit:如何排除分支?

标签 git svn git-svn subgit

我正在测试 SubGit 作为从 SVN 迁移到 Git 的一种方式。

我想做的是能够在 git 存储库中创建所有用户都可以使用的远程分支,不会同步回 SVN。

我只希望 SubGit 跟踪 master 分支并将其同步回 SVN,以便我们可以自由使用和共享其他 Git 分支。

有没有简单的方法可以做到这一点?

谢谢

最佳答案

理想的解决方案是在 SubGit configuration 中指定 trunk:refs/heads/master 映射, 因此 SubGit 将同步 trunkmaster 忽略任何其他分支。

不幸的是,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 分支 foomaster 的结果,那么 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 支持单分支布局,因此配置文件可能如下所示:

  1. 没有主干,没有分支,没有标签,没有架子:

    [svn]
        url = http://host.com/repos/project
    

    在这种情况下,project 目录直接映射到 Git 存储库中的 master 分支; SubGit 忽略任何其他分支并且从不创建架子,这意味着匿名 Git 分支不会同步到 SVN。

  2. 单行李箱,无货架:

    [svn]
        url = http://host.com/repos/project
        trunk = trunk:refs/heads/master
    

    在这种情况下,project/trunk 目录映射到 Git 存储库中的 master 分支; SubGit 忽略任何其他分支并且从不创建书架。

  3. 带搁板的单行李箱:

    [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/

相关文章:

java - Eclipse subversion svn不上传目录

git - 查找在提交之间发生更改的目录

git - 防止将某些提交/代码 merge 到 master 中

linux - Git:删除后使用本地更改恢复文件

git - 如何使用 git-svn 只检查主干而不检查分支和标签?

svn - 从 Subversion 迁移到 Git 如何找到给定修订号的提交?

linux - git-svn 或 git-flow 命令是如何在中间没有破折号的情况下执行的

git - Angular-phonecat 教程 - 服务器不工作

visual-studio - 分布式源代码管理不适用于 Visual Studio 用户?

c# - Visual C# Studio 项目中的哪些文件不需要进行版本控制?