MS RFC 84:将项目存储库从SVN迁移到Git

日期

2012-03-23

作者

托马斯堡

联系

t在Terriscope DOT FR的端口

状态

采用

版本

地图服务器6.2

1。概述

虽然SVN适合我们作为协作源代码版本管理器的需要,但是它的缺点使开发人员很难同时处理多个任务。Git的简单分支使为单个任务设置分支成为可能,将代码更改与其他分支隔离开来,从而使从一个任务切换到另一个任务成为可能,而不会有丢失或错误提交进行中的工作代码的风险。三种不同分支的合并意味着将代码从一个分支合并到另一个分支成为一个快速的任务,只需处理代码中的实际冲突。脱机提交和访问整个历史记录使脱机工作成为可能。

已经有一些共识认为从SVN迁移到Git是一个很好的举措。关于如何进行这种过渡,仍有讨论。此RFC概述了用于托管官方存储库的不同选项,以及用于跟踪票据的不同选项。

目前的调查保留了两个主要的选择,我们可以选择:

  • 存储库迁移到GitHub,使用GitHub提供问题跟踪。这个选项将被称为“GitHub托管”。

  • 存储库由osgeo托管,当前的trac实例迁移到新存储库的钩子上。此选项将被称为“osgeo托管”

2.GitHub托管

此选项包括将整个代码+票据基础结构移动到GitHub。当前的trac实例几乎是只读的,无法在其上创建新的票证。现有的票据通过一个脚本迁移到Github,该脚本采用trac postgresql转储(一旦迁移开始,我们的trac实例将变为只读)。

优势

  • 代码托管:

  • 无需担心托管基础设施

  • 可以在短时间内启动和运行

  • 支持拉取请求,允许外部贡献快速合并到我们的存储库中

  • 快速修正的在线代码编辑

  • GitHub可视化工具,例如,用于检查哪些分支可能包含冲突的代码段

  • 代码和补丁注释使得协作处理一个给定的特性变得非常轻量级,也就是说,仅仅在您对代码行的注释处,这对您来说似乎有问题。

  • 文档贡献对于一次性贡献高度简化。

  • 问题跟踪:

  • 票据状态与提交消息的集成(例如:“fix mem allocation in mapdraw(),close issue 1234

  • 通过电子邮件回复机票通知

  • 问题的自由标签标记可能会打开一些有趣的用法。

  • 带注释的版本化文本基附件(GIST)

不便之处

  • 由一家私人公司托管,如果他们的任务发生变化或停业,这可能成为一个问题。源代码可用性并不是维护osgeo服务器上镜像的可能问题,而且每个开发人员都有完整的源代码管理历史记录的签出。票据迁移将是一个问题,但有可用的API来提取现有票据。

  • 问题追踪器在某些方面不如Trac功能齐全。唯一的硬编码属性是受让人和里程碑。所有其他的分类信息都会被放进自由格式的标签,一个la gmail。

  • 无法自动分配给组件的票据所有者

  • 不支持图像附件,可以由URL引用,但必须托管在其他位置。

  • 不支持私人安全票

  • 管理Committer访问将通过Github完成,不应用osgeo凭据。Git不支持每个目录的细粒度提交权限,将有一个单独的文档存储库,用于解释那里的提交者数量更多。

三。Git崇拜

稳定枝

本文档概述了修复我们稳定分支中的错误的工作流程:http://www.net-snmp.org/wiki/index.php/Git_Workflow我认为它与我们的稳定版本管理非常匹配:-选择应该应用修复的最旧分支-将修复提交到这个最旧的分支-将旧分支向下合并到所有较新的分支,包括Main

发布管理

我们不会在测试版周期中冻结开发,而是一旦决定冻结特性,就会创建一个新的发布分支,我们的测试版、发行版和后续的错误修复版本都会从这个分支上标记出来。错误修复被提交到这个新的稳定分支,并合并到Main中。在所有测试阶段,新功能都可以继续添加到Main中。Http://nvie.com/posts/a-successful-git-branching-model/是一个有趣的读物,尽管它并不完全适合我们的稳定版本分支。

4。SVN用户的升级路径

对于那些不希望更改其工作流并继续使用SVN命令的用户。这不是与Git一起工作的推荐方法,因为本地或远程更改最终可能会有冲突需要解决,如与SVN的冲突。

结帐:
  • git克隆git@github.com:mapserver/mapserver

更新
  • Git拉式原点主线

提交文件
  • git add[文件列表]

  • Git提交-m“foo”

  • Git推送原点主线

固定在分支,并将FIX合并到Main
  • Git结帐MS-BRANCH-6-0

  • git add[文件列表]

  • Git提交-m“foo”

  • Git Push原始MS-Branch-6-0

  • Git结账主干

  • Git合并MS-Branch-6-0

  • Git推送原点主线

5。任务

  • 将SVN导入Git

  • 分配GitHub用户

  • 拆分为子项目(C.F.RFC83):

    • 映射服务器

    • MapCache

    • TinyOWS

    • MasutoTestin

    • 文档

  • 文件发布过程

  • 迁移网站脚本

  • 将Trac站点切换为只读

6。臭虫识别码

  • TBD

6。投票历史

+1来自托马斯布、米克斯、翁伯顿、霍华德、史蒂文、丹尼尔、史蒂文、塔马斯、杰夫姆、阿塞菲、汤克、佩里恩。

-0来自Olivierc