同步TFS和GIT

mag*_*gol 18 git tfs git-tfs tfs2013

今天我们在本地TFS服务器上拥有所有源代码.现在我们希望一些外部方可以访问部分代码.因此,我们考虑将例如克隆到他们可以访问的外部GIT服务器的可能性.

我看过git-tfs.但是如果我理解正确的话,当它们发生任何变化时,你必须手动同步GIT和TFS.有没有办法克隆自动同步的代码.

如果TFS有变化,它会自动同步到GIT,反之亦然.如果我使用最新的代码,应该没有不确定性

Phi*_*ppe 10

没有办法同步2个存储库,100%自动地与您选择的任何解决方案一起演变(为了实现自动同步,您必须立即实现同步或者能够阻止推入git或在TFVC中检入其中一个2队开始同步).

所以,你总是会有冲突,你应该手动合并.您可以找到一个工作流程来阻止其中大部分工作但从未解决所有案例,这些剩余的案例将很难解决......

无论如何,你几乎可以实现你想要的东西(这取决于你的期望:你需要分支支持 - 硬 - ,...)与git-tfs(我已经包含在git-tfs中所有需要这样做但从不用于生产)但它有点棘手.

您需要在存储库中克隆您的TFS存储bare库:

git tfs clone https://server/tfs/TeamCollection $/project/trunk --bare --with-branches

那么你需要在post-receive这个bare存储库的钩子中写下类似的东西(我不记得它是否有效):

branch=$(git rev-parse --symbolic --abbrev-ref $1)
if [ "master" == "$branch" ]; then
    branch="default" 
fi
git tfs rcheckin --bare -i $branch
Run Code Online (Sandbox Code Playgroud)

有了这个,每次有人推入git存储库时,都会在TFS中签入提交.

为了更加舒适(否则他们在尝试推送时总会遇到无聊的冲突),您可以将git存储库与TFS服务器同步并使用命令执行计划任务(这样他们就会更快地知道新的提交):

git tfs fetch --all
Run Code Online (Sandbox Code Playgroud)

注意:我不记得是否可以在bare存储库中使用此命令(现在我想到了,我不这么认为).否则你将不得不使用git tfs fetch -b=myGitBranch -i tfsRemote每个现有的分支:(

但我确信他们永远无法使用尚未在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
  • 试着说服你的企业,每个团队都应该选择并掌握其工具,而不是强加一些选择.