今天,我们在本地 TFS 服务器上拥有所有源代码。现在我们希望一些外部方可以访问部分代码。因此,我们研究了将代码克隆到他们可以访问的外部 GIT 服务器的可能性。
我看过git-tfs。但是,如果我理解正确,您必须在其中任何一个发生更改时手动同步 GIT 和 TFS。有没有办法克隆自动同步的代码。
如果 TFS 有变化,它会自动同步到 GIT,反之亦然。如果我使用最新的代码,应该没有不确定性
无法使用您选择的任何解决方案同步 100% 自动独立发展的 2 个存储库(要实现自动同步,您必须立即实现同步,或者能够阻止 git 中的推送或签入 TFVC 中的一个2队开始同步)。
因此,您将始终遇到应手动合并的冲突。您可以找到一个可以阻止大多数情况但永远无法解决所有情况的工作流程,并且这些剩余情况将很难解决......
无论如何,您几乎可以使用 git-tfs 实现您想要的(这取决于您的期望:您是否需要分支支持 --hard--,...)用于生产)但它有点棘手。
您需要在存储库中克隆 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
这样,每次有人推送到 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:
自提出该问题以来(2013 年第四季度)的主要变化是 TFS 2015/2017 现在正式支持 Git 存储库。请参阅“ Git 和 TFS ”。
所以一个合理的方法是:
这将为您留下一组 TFS 项目,每个项目都可以向特定团队开放,确保只有特定部分对其他贡献者可见/可访问。
并且随时;从主 coderepo 存储库中,您可以使用以下命令更新这些子模块:
git submodule update --recursive --remote --rebase
(然后测试、添加、提交和推送:您的主 Git 存储库将参考这些子模块的最新发展)
另外,考虑到l--''''''---------''''''''''''
's previous question,这将有助于处理包含太多文件的单个 repo。
虽然,为此,很快就会有(ish) GVFS。
提到的替代方法l--''''''---------''''''''''''
是:
我个人希望能够将 GIT 用于我自己的更改,我将在 GIT 中有多个变更集,然后我会将它们合并为一个,然后将该变更集转换为传统的 TFS 变更集并签入,这样我就有了每个 TFS 项目 1 次签到
这是可能的,前提是您不介意丢失中间 Git 提交历史,然后将它们聚合到一个 TFS 变更集中。