在TFS Git项目VNEXT构建中的依赖项目

3
这更多是一个最佳实践问题,因为我们已经有了一个解决方案,但我很好奇是否有更好的解决方法。
我们的项目分为一个巨大的基础项目和所有其他项目依赖的子项目。因此,在构建子项目时,我还需要检查它。在TFSVC-build中,这在构建定义的“源”选项卡中是可能的,您可以指定您想要让构建代理为您获取的确切项目。
在git(和VNEXT)中,该选项卡已经消失了,而现在只有指定当前存储库的分支的选项。我们通过为每个项目添加powershell脚本来解决了这个问题,该脚本仅运行“git clone mainproject”,从而授予与以前相同的效果。
然而,如果我们的主项目URL发生变化,这意味着我们必须更改每个客户项目中的此脚本,这虽然不是不可能,但会很繁琐。
是否有人有类似的经验,并找到了更好的解决方法?
1个回答

2
你可以将主项目作为每个其他项目中的子模块来添加。
cd /path/to/otherproject
git submodule add -b master -- https://url/of/main/project

对于那个项目来说,执行 git clone --recursive 命令会自动将您的主项目作为子目录克隆。
正如 "git submodule tracking latest" 所描述的那样,在每次执行git submodule update --remote时,该主项目子模块都将跟踪其上游 repo 主分支的最新版本。
由于 git-tfs 尚不支持子模块,因此您需要回退到命令行。
注意:正如Daniel Mann评论中提到的那样:

TFS支持一个团队项目中的多个存储库。每个项目都不需要拥有自己的团队项目。
这实际上与当前项目组织指南相反

这意味着在TFS环境中,每个项目一个子模块的想法,虽然是一个有效的“git”解决方案,但可能不是最好的解决方案。
Daniel提到了Willy-P. Schaub的博客文章“Many Git Repositories, but one Team Project to rule them all”。

那样的话,我只是在用另一个脚本替换它而已。尤其是因为子模块链接到提交,每次都需要升级。 - user2375291
1
@submarines 不可以,但是你可以将子模块链接到一个分支上(参考:https://dev59.com/Zmox5IYBdhLWcg3weUGe#9189815,还有https://dev59.com/pnI-5IYBdhLWcg3wlpeW#18799234):使用 git submodule update --remote --recursive 命令可以自动将子模块更新到最新的分支。 - VonC
@submarines 我已经编辑了答案,使得在使用子模块时 -b master 选项更加明显。 - VonC
值得注意的是,TFS 支持在一个团队项目中使用多个代码仓库。不必将每个东西都放在自己的团队项目中。这实际上与当前的项目组织指南相反。 - Daniel Mann
以下是一个示例:http://blogs.msdn.com/b/willy-peter_schaub/archive/2014/11/19/many-git-repositories-but-one-team-project-to-rule-them-all.aspx - Daniel Mann
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接