我在 TFS(Microsoft Team Foundation Server)中有一个代码存储库。我可以使用 git-tfs 将其转换为 git 存储库。
但我想做的是设置一个推送到 TFS 的中央 git 存储库,并让所有开发人员克隆该 git 存储库并且无法推送到 TFS。就中央回购“下游”的任何人而言,我根本不希望有任何迹象表明存在 TFS 回购。
由于 TFS 服务器信息包含在 git-tfs 生成的 repo 中,我该怎么做呢?
要使其发挥作用,需要解决几个问题。最突出的是从 git 用户到 TFS 凭据的映射,这些凭据将在签入更改回 TFS 时使用。
其他麻烦的事情可能与其他 TFS 用户发生冲突(即,如果有人决定直接将东西推送到 TFS)。
这就是为什么我认为它没有作为 git-tfs 的一部分开发的原因(至少这就是我几个月前没有添加此功能的原因)。
如果您可以在纯文本文件中使用 TFS 登录名/密码对,并且您可以确保无冲突的工作流程(例如,禁止以除通过您的 git 中央存储库之外的任何其他方式签入 TFS) - 您可以实现您需要的使用提交挂钩,甚至使用简单的调度程序(因此推送不会立即进行,而是延迟和异步,从而显着加快推送到 git 中央存储库)。
实际的脚本应该很简单,但还没有人费心写一个(至少我不知道这样的事情)。
--no-metadata
首先,使用标志从您的提交中剥离 TFS 元数据。然后使用该--authors="path-to-authors.txt"
标志将您的 TFS 用户映射到当前用户。
git tfs clone http://tfs:8080/tfs/DefaultCollection $/Project1 --authors="c:\project1\authors.txt" --no-metadata
在您的 authors.txt 中,将您的用户 TFS id 映射到他们的电子邮件,如下所示:
TFSDOMAIN\peter.pan = Peter Pan <peter.pan@disney.com>
克隆 repo 后,运行git tfs bootstrap
并删除文件中的 TFS 配置.git/config
。您现在应该无法签入 TFS,但仍然可以在您的开发人员之间共享 repo。
有关https://github.com/git-tfs/git-tfs/blob/master/doc/commands/clone.md的更多详细信息git tfs clone