今天,我们在本地TFS服务器上有了所有的源代码。现在,我们希望某些外部方能够访问代码的一部分。因此,我们研究了这样一种可能性,即将此代码克隆到他们可以访问的外部GIT服务器上。
我看过git-tfs了。但是,如果我正确理解,您必须在GIT和TFS发生任何更改时手动同步它们。是否有一种方法可以自动同步代码的克隆。
如果TFS有更改,则自动同步到GIT,反之亦然。如果我使用最新的代码,就不会有任何不确定性。
发布于 2013-11-22 10:34:13
无论您选择哪种解决方案,都不可能单独地100%自动同步2个存储库(要实现自动同步,必须在任何时间内实现同步,或者在两个团队之一开始同步时阻止推送git或签入TFVC )。
因此,您将始终有冲突,您应该合并手动。您可以找到一个工作流,它可以阻止大多数案例,但永远不会解决所有的问题,而剩下的这些案例将非常难以解决……
无论如何,你几乎可以得到你想要的东西(这取决于你的期望:你需要分支支持吗?困难-……)对于git(我已经包含在git中,所有这些都需要这样做,但从未在生产中使用过),但这有点棘手。
您需要在bare存储库中克隆您的TFS存储库:
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这样,每次有人推入git存储库时,提交都将在TFS中签入。
为了获得更多的安慰(否则,当他们试图推送时,他们总是会有无聊的冲突需要解决),您可以通过命令将git存储库与TFS服务器与计划的任务同步(这样他们就会更早地意识到新的提交):
git tfs fetch --all注意:我不记得这个命令是否可以在bare存储库中使用(考虑到这一点,我不这么认为)。否则,您必须对每个现有分支使用git tfs fetch -b=myGitBranch -i tfsRemote :(
但我确信,他们永远无法使用tfs中尚未创建的分支:( git-tfs工具确实无法从git历史记录中自动创建TFVC分支。从技术上讲,我认为这是可以实现的,但从未开发过(因为git-tfs更像是逃离TFVC的工具,而不是用来检查您在其中的开发的工具…)
其他的事情可能很难或者不可能做.
我希望这会有所帮助。
PS:
发布于 2017-12-18 18:43:43
自提出这一问题(2013年Q4版)以来的主要变化是,2015/2017年TFS现在得到了对Git存储库的官方支持。见"Git和TFS“。
因此,一个合理的办法是:
这将给您留下一个TFS项目的集合,每个项目都可以向特定的团队开放,确保其他贡献者只可以看到/访问特定的部分。
在任何时候;从主要的coderepo回购,您可以用以下方式更新这些子模块:
git submodule update --recursive --remote --rebase(然后测试、添加、提交和推送:您的主要Git回购将引用这些子模块的最新发展)
此外,考虑到l--''''''---------''''''''''''的前一个问题,这将有助于单次回购有太多的文件。
虽然,对此,不久将有(Ish) GVFS。
l--''''''---------''''''''''''提到的替代方法是:
我个人想要在我自己的变更中使用GIT,我会在GIT中有多个变更集,然后将它们合并为一个,然后将那个变更集转换成一个传统的TFS变更集,并签入,这样我就有一个签入每个TFS项。
这是可能的,只要您不介意丢失中间Git提交历史,当您将它们聚集到一个TFS变更集中时。
https://stackoverflow.com/questions/20117574
复制相似问题