首页 > 解决方案 > 仅将 TFS 存储库的一部分迁移到 Azure DevOps 上的 Git

问题描述

我是一家公司的新手,我的老板希望我建立一个合适的 Git 存储库来替换现有的 TFVC 存储库。我的公司有几十个针对各种不同产品的 .NET 解决方案,所有这些解决方案都在一个单独的存储库中,都在单独的文件夹中。这些解决方案位于包含整个 repo 的总体文件夹的子文件夹中(有 3 个标记为 dev、main 和 master 的分支)。

我有两个问题:

1) 如何仅将其中一个解决方案放入单个 Git 存储库中,以移入我们新的 Azure DevOps 分支?在这种情况下我应该使用哪些工具?Azure DevOps 本身还是 git-tf 或 git tfs 命令行的组合?好的,这是一个 3 个问题。

2) TFS 具有三个分支:dev、main 和 master(它们是解决方案文件夹的父级)。如何将其中一个分支引入 Git(即,我只想将 Master 引入)?我必须包括所有分支吗?

所以2组问题,但实际上是5个加载问题。我很抱歉,但这是一个棘手的情况。先感谢您。

标签: gittfsazure-devopsgit-tfsgit-tf

解决方案


我写这篇文章是对你的策略的假设:

下面的答案有一种假设你想传播 repo-per-sln 方法的味道。“我们最好将所有内容快速放入一个 git repo 并稍后分开,还是一块一块地转移到 git 中?” 是一个真正的问题。我只参与了一次完整的迁移,并且协调工作非常重要,因为 ppl 周五使用 TFVC 回家,但周一使用 Git 进来。

我提出这个是因为你提到你的老板

希望 [you] 建立一个适当的 Git 存储库来替换现有的 TFVC 存储库

使用“适当的 Git 存储库”(单数)可能会改变您处理事物的方式,尤其是在 AzDO CI/CD 方面。

关于(我的版本)答案:

如何仅将其中一个解决方案放入单个 Git 存储库

如果解决方案是真正独立的,并且您不依赖于其他解决方案,则为您的存储库创建一个具有您喜欢的名称的目录,并对其进行良好的复制粘贴处理。然后你可以在那里初始化一个 git repo(不要忘记为 VS 项目包含一个好的 .gitignore 文件)并提交初始更改。然后,您可以将 AzDO 项目存储库设置为要推送到的远程。

如果您是 Git 新手,您可能希望在 AzDO 上初始化存储库并在本地克隆,而不是手动将 AzDO 设置为您在本地创建的存储库的远程。然后您仍然可以使用锤子(阅读:复制/粘贴)将您的 TFVC 代码放入新的 git 存储库中。

如果解决方案与项目和程序集引用相互依赖,那么您需要在这里真正考虑策略。在我最近的迁移中,我们选择使用 NuGet 包来交付跨多个服务或产品共享的组件。在这种情况下,您可能希望从共享代码开始。将这些东西放在自己的位置,并实施交付策略是一个很好的起点,它将让您真正了解迁移将采取什么措施。

在这种情况下我应该使用哪些工具?

我倾向于将 Git Bash 用于大多数这样的事情,但“对每个人来说都是他自己的”。正如@DanielMann 所提到的,您的工具将由您真正需要的历史记录来定义。到目前为止,我在所有迁移中都支持他的观点。“让过去成为过去。” 此最新迁移还选择放弃本地 Team City 构建配置,转而支持 SC >> CI >> CD 的纯 AzDO 实施。

2) TFS 具有三个分支:dev、main 和 master(它们是解决方案文件夹的父级)。如何将其中一个分支引入 Git(即,我只想将 Master 引入)?我必须包括所有分支吗?

我将颠倒这两个问题的顺序:

我必须包括所有分支吗?

不。TFVC 跟踪文件,因此每个分支都有自己的文件系统部分。

2) TFS 具有三个分支:dev、main 和 master(它们是解决方案文件夹的父级)。如何将其中一个分支引入 Git(即,我只想将 Master 引入)?

再次,使用锤子。您应该在本地文件系统中创建一个新区域来表示存储库。例如:我的 repo 容器是c:/src/然后我有代表每个单独的 repo c:src/r1/ c:src/r2/ect 的目录。(注意:我的名字比示例中的名字好得多)。一旦你有了这个,从所需的 TFVC 分支获取最新信息并敲定。

可能的头痛

确保您可以让其他开发人员停止对您正在迁移的代码进行更改。如果您还要设置 AzDO CI/CD 管道,您最终可能会更改项目以使其正常工作。如果开发人员仍在更改您正在处理的源代码,您将希望在 TFVC 中回显您的更改以供他们在其上编写,否则当您尝试将新更改重新写入 git 时,您将陷入合并地狱。


推荐阅读