将 git 存储库链接到多个 TFS 项目



我有一个 git 存储库,需要作为共享库/通用代码在多个其他项目之间共享。使用此通用代码的项目都是 TFS 项目 (TFS2013)。我能够在 TFS 中托管 git 存储库,但无法弄清楚如何将 git 和 TFS 存储库链接在一起而不会重复。

我试图实现的想法与 git 的子模块相同,其中一个 git 存储库可以是 N 个其他 git 存储库的子模块:

- CommonLib/ (git)
- src/
- inc/
- Project1/ (git)
- src/
- inc/
- lib/
-CommonLib (git submodule)
- Project2/ (git)
- src/
- inc/
- lib/
-CommonLib (git submodule)

但我想在项目是 TFS 存储库时执行此操作:

- CommonLib/ (git)
- src/
- inc/
- Project1/ (TFS)
- src/
- inc/
- lib/
-CommonLib (?? How to link ??)
- Project2/ (TFS)
- src/
- inc/
- lib/
-CommonLib (?? How to link ??)

这可能吗?

我想出的一个解决方案是将 CommonLib 存储库克隆到每个项目的 lib/目录中,并适当地设置上游远程。但是,我必须将 git 存储库签入 TFS 存储库,这对我来说似乎是不正确的。

我希望在 Project2 中的 CommonLib 中进行源代码更改的开发人员能够在签入 TFS 时自动将更改签入到 git 存储库。类似于使用 git 子模块的方式,他们可以在父级的单个 git 提交中同时提交项目更改(父级)和子模块(子级)更改。

是的,这是可能的。您可以通过git 命令行(例如 git bash)为 TFS git 存储库添加子模块,因为 TFS IDE(Visual Studio)不能很好地显示 git 子模块,但它会在不久的将来得到改进。

用于为 TFS git 存储库项目 1(类似于项目 2)添加子模块的命令如下所示:

git clone http://account:8080/tfs/DefaultCollection/_git/Project1
cd Project1
git submodule add http://account:8080/tfs/DefaultCollection/_git/CommonLib
git push

如果 CommonLib 已更新,并且您可以通过git submodule update --remote更新 Project1 中的子模块。

子模块中的文件可以在本地存储库中查看。只能在 TFS git 存储库中找到子模块的最新提交 ID。

没有可用的工具可以为您执行此操作:我建议不要使用这种方法,我将向您展示原因。

Visual Studio将无济于事,除非您使用不同的.SLN文件,由开发人员手动触摸代码并进行操作。 您可以设计自己的命令行工具,通过按顺序调用gittf来以某种方式同步两个版本控制系统上的操作。可以从 git 中选择提交 sha 并添加到 TFVC 注释中。在任何情况下,都很难确定 TFS 变更集需要哪个 git 提交。

我建议你将所有代码移动到两个版本控制系统中的任何一个。

最新更新