克隆多个 TFS 存储库的过程

Process to clone multiple TFS repositories

我们目前正在尝试将一些存储库从 TFS 迁移到 Git。但是我遇到了一些问题,我需要一些帮助来定义流程。

我们有不同的产品,并且在 TFS 中有与这些产品相对应的文件夹。例如,Application 1Application 2Product 3等。当我使用git tfs list-remote-branches <tfs url>时:我看到的可以克隆的分支的结果是这样的:

$/Application 1/some folder1/some subfolder1 [*]
|
+- $/Application 1/some folder1/some subfolder1/v.15/DLL files

$/Application 2/some folder2/some subfolder2 [*]
|
+- $/Application 2/some folder2/some subfolder2/v.14/DLL files
|  |  $Application 2/some folder2/some subfolder2/v.20/LayoutDesigns

上面的代码片段是我使用 git tfs list-remote-branches 命令时获得的结果类型的示例。我可以使用以下方法成功克隆这些存储库:

git tfs clone <tfs url> <repo path> --branches=all

但是,这有一个问题。我正在尝试定义一个流程,在该流程中可以轻松完成所有这些工作。我知道我可以为此编写一个脚本,并且我正在努力解决这个问题。但我遇到的问题是我无法直接克隆 $/Application 1$/Application 2。以上只是一个示例,而实际上我需要克隆更多的分支。按此顺序全部完成,看起来会很杂乱无章。

我尝试使用 Visual Studio Source Explorer 中的“转换为分支”并尝试将 $/Application 1 和其他文件夹(Application 2Product 3)转换为分支但是它说分支已经存在所以它不能转换它。

有没有一种流畅有效的方法可以克隆这些 TFS 存储库并将它们转换为 git?到目前为止,这个过程可能会变得非常混乱,因为 git tfs clone 为每个单独的分支创建文件夹。

由于 2 个 VCS 工具之间的差异,将 TFVC 迁移到 git 是一件棘手的事情。

git-tfs 正在尝试提供帮助,但如果您尝试要求它迁移分支,则取决于复杂的 TFVC 历史的程度可能无法迁移它。

因为使用 git-tfs,你有两种可能性:

  1. 尝试迁移分支
  2. 以“平坦”的历史迁移

1。使用分支支持迁移

您需要克隆 git tfs list-remote-branches 返回的分支之一。

大多数时候,您会想要复制用 [*] 突出显示的那些。

如果我很理解你的问题,你会想要克隆所有顶级分支和所有链接分支(带有 --branches=all )即:

git tfs clone <tfs url> "$/Application 1/some folder1/some subfolder1" --branches=all
git tfs clone <tfs url> "$/Application 2/some folder2/some subfolder2" --branches=all
...

如果一切顺利,每个克隆都会为您提供一个 git 存储库,其中包含克隆的分支以及链接到其中的所有其他分支。

例如,对于 Application 1,您最终会在 git 存储库中找到 2 个“pseudo/tfvc” git 远程:tfs/default 将对应到克隆的分支,每个其他分支都有自己的“tfvc”远程

在那之后,您将能够像那样保留它或尝试将所有“应用程序”存储库与 git。

合并

2。以平坦的历史迁移

这是使用 --branches=none 选项完成的。 您可以克隆您想要的 TFVC 文件夹甚至根存储库,但它只会获取此范围的历史记录并且不会尝试

这是上一个方法失败时要做的事情。 因此,您知道有一个 git 历史记录,您可以保持这样(但大多数时候它不会真正有用)或尝试使用 git 命令重新创建历史记录(例如git subtree)。但它远非完美。

您可以在此处找到 git-tfs 的更多文档:https://github.com/git-tfs/git-tfs#use-git-tfs