Sync TFS and GIT
今天,我们所有的源代码都在本地TFS服务器上。现在,我们希望某些外部方可以访问部分代码。因此,我们考虑了例如将此代码克隆到他们可以访问的外部GIT服务器上。
我看过git-tfs。但是,如果我理解正确,那么当它们发生任何更改时,您必须手动同步GIT和TFS。有没有办法克隆自动同步的代码。
如果TFS中有更改,它将自动同步到GIT,反之亦然。如果我使用最新的代码,应该没有不确定性。
无法使用您选择的任何解决方案自动同步2个分别自动进行100%演化的存储库(要实现自动同步,您必须立即实现同步,或者必须阻止git推送或在TFVC中签入, 2个团队之一开始同步)。
因此,您始终会有冲突,应该手动合并。您可能会找到一个可以阻止大多数情况的工作流程,但永远无法解决所有情况,而剩下的情况将真的很难解决...
无论如何,您几乎可以用git-tfs(我已经在git-tfs中包括了所有要做的事情)实现了您想要的(取决于您的期望:您是否需要分支支持--hard-,...) ,但从未在生产中使用过),但这有点棘手。
您需要在
然后,您需要在该
1 2 3 4 5 | branch=$(git rev-parse --symbolic --abbrev-ref $1) if ["master" =="$branch" ]; then branch="default" fi git tfs rcheckin --bare -i $branch |
这样,每次有人在git仓库中推送时,提交都将在TFS中检入。
为了更加舒适(否则,当他们尝试推送时,他们总是会遇到无聊的冲突来解决),您可以将git存储库与TFS服务器与带有计划任务的命令同步(这样,他们将更快地意识到新的提交) :
1 | git tfs fetch --all |
注意:我不记得是否可以在
但是我确定他们永远无法使用尚未在tfs中创建的分支:( git-tfs工具确实无法从git历史记录自动创建TFVC分支。从技术上讲,这是可以实现的,我认为却从未开发过(因为git-tfs是比TFVC还要强大的工具?
还有其他一些事情可能很难或不可能做到...
我希望这会有所帮助。
PS:
- 对于不习惯git-tfs的人来说,这是一件艰巨的工作……而我不建议这样做。
- 我强烈建议采用与Microsoft相同的方式,并将所有内容迁移到git上(如果需要,甚至可以保留在TFS服务器或VSTS上),这样同步会容易得多(即使不是100%自动;-)。我已经就如何从TFVC迁移做了很好的文档:https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md
- 尝试说服您的企业,每个团队都应该选择并掌握其工具,而不应施加某些选择。
自从提出此问题(2013年第四季度)以来,主要变化是TFS 2015/2017现在对Git存储库具有官方支持。请参见" Git和TFS"。
因此,合理的方法是:
- 使用git-tfs之类的工具将现有的TFS项目历史记录导出到新的Git存储库中。
- 将Git存储库拆分为一个主代码库和几个较小的存储库,每个存储库代表您希望其他贡献者访问的部分
- 在主代码库中将这些子存储库作为子模块引用
- 最后,创建TFS项目(这次使用Git仓库),以便将这些仓库回推到TFS服务器。
这将为您提供一系列TFS项目,每个项目都可以向特定团队开放,确保其他贡献者只能看到/访问特定的部分。
在任何时候;从主代码仓库中,您可以使用以下命令更新这些子模块:
1 | git submodule update --recursive --remote --rebase |
(然后测试,添加,提交和推送:您的主要Git存储库将引用这些子模块的最新动态)
此外,考虑到
尽管为此,不久将有GVFS。
I personally want to be able to use GIT for my own changes, I would
have multiple changesets in GIT, then I would merge them into one, and
then convert that changeset into a traditional TFS changeset and check
that in, that way I just have 1 check-in per TFS item
这是可能的,只要您不介意丢失中间的Git提交历史记录,那么当您将它们汇总到一个TFS变更集中时即可。