克隆多个 TFS 存储库的过程
Posted
技术标签:
【中文标题】克隆多个 TFS 存储库的过程【英文标题】:Process to clone multiple TFS repositories 【发布时间】:2021-07-16 12:12:40 【问题描述】:我们目前正在尝试将一些存储库从 TFS 迁移到 Git。但是我遇到了一些问题,我可以在定义流程时使用一些帮助。
我们有不同的产品,并且在 TFS 中有与这些产品相对应的文件夹。比如Application 1
、Application 2
、Product 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
上面的 sn-p 是我使用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 2
和 Product 3
)转换为分支,但它说分支已经存在,所以它不能转换它。
有没有一种流畅有效的方法可以克隆这些 TFS 存储库并将它们转换为 git?到目前为止,该过程可能会变得非常混乱,因为git tfs clone
会为每个单独的分支创建文件夹。
【问题讨论】:
【参考方案1】:由于 2 个 VCS 工具之间的差异,将 TFVC 迁移到 git 是一件棘手的事情。
git-tfs 正在尝试提供帮助,但如果您尝试要求它迁移分支,则取决于 TFVC 历史的复杂程度可能无法迁移它。
因为有了 git-tfs,你有两种可能:
-
尝试迁移分支
使用“平坦”历史迁移
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 remote:tfs/default
将对应于克隆的分支,并且每个其他分支都将拥有自己的 "tfvc" 远程
之后,您将能够保持这种状态或尝试将所有“应用程序”存储库与 git 结合起来。
2。使用平坦的历史迁移
使用--branches=none
选项完成。
您可以克隆您想要的 TFVC 文件夹,甚至是根存储库,但它只会获取此范围的历史记录,而不会尝试
这就是前一种方法失败时要做的事情。
结果,您知道有一个 git 历史记录,您可以保留它(但大多数时候它不会真正有用)或尝试使用git
命令(如git subtree
)重新创建历史记录。但这远非完美。
你可以在这里找到更多关于 git-tfs 的文档:https://github.com/git-tfs/git-tfs#use-git-tfs
【讨论】:
是的,这就是我希望它们克隆的方式。如果我输入"$/Application 1/some folder1/some subfolder1"
的路径,我最终会得到一个包含内容的“某个子文件夹”,但是,我会丢失之前的路径。总而言之,它提供了一个非常复杂和令人费解的解决方案。我正在努力做到这一点,以便在这种情况下我可以克隆$/Application 1
,并克隆与之关联的所有分支。但是,$/Application 1" cannot be cloned as it is not listed with a
[*] `.以上是关于克隆多个 TFS 存储库的过程的主要内容,如果未能解决你的问题,请参考以下文章
通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API
当 TFS 为构建克隆 git 存储库时出现 AppDomainUnloadedException