如何在同一源代码树中使用GIT-TFS和GIT-SVN?

时间:2011-04-04 13:57:18

标签: git git-svn dvcs git-tfs

我有一个项目在工作,我想通过使用git为我的本地源代码控制使不必要地复杂更容易。我们在工作中使用TFS,但我还必须将源推送到客户端的SVN服务器以获取生产版本。 TFS需要成为官方的记录来源[直到我能说出令人信服的情况才能切换:-)],SVN只是里程碑,我喜欢git成为日常的工作环境。

我一直在使用git-svn作为第二部分,基本上只是承诺对里程碑进行git,然后推送到svn。

我想转而使用git而不是TFS来进行更积极的开发,但是我不确定如何同时设置两个映射。我在git-tfs和git-svn看到的所有示例都以克隆存储库开始,这需要存储库为空。是否有某种元数据我可以添加而不是克隆来设置TFS映射?

映射也有点奇怪(它是一个CMS站点,所以我们不将核心文件存储在源代码控制中,只存储我们的自定义项):

  • 标签(仅供SVN使用)
  • 分支机构(来自SVN,未使用)
  • trunk(来自SVN,符号链接到网站)
  • 网站
    • DesktopModules(以TFS映射)
    • 门户网站(以TFS格式映射)
    • 提供商(在TFS中映射)

git是否能够处理在根位置映射的SVN存储库以及进一步映射到的TFS存储库?

是否可以删除TFS中映射的文件夹,然后从git-tfs克隆它们?

2 个答案:

答案 0 :(得分:1)

您可以将git-svn移植到任何存储库,方法是将适当的节添加到.git/config(检查任何正常工作的git-svn存储库以查看其外观),然后git-svn fetch填充它。 git-svngit-tfs不太可能为相同的树生成​​相同的SHA(例如,由于诸如用户名映射或日期之类的微不足道的事情,或者像提交消息中的元数据git-svn那样不那么琐碎的事情默认情况下)但合并应该是微不足道的。您可以使用svn.noMetadata禁用将SVN修订映射到git提交的每个提交中的额外行。唯一的缺点是rev_map将是该信息的唯一来源,如果它被删除(或者如果您克隆工作副本),git-svn连接将被破坏。

答案 1 :(得分:0)

我认为目前你做不到。当你提交tfs时 - git-tfs有效地将你的提交重写为具有相同树和更改注释的新提交(在原始注释的末尾附加类似git-tfs-id: [http://tfs:8080/tfs]$/Project;C666的内容)。

有一些thoughts关于用git notes替换评论。但目前的计划甚至都没有。