我写这篇文章是对你的策略的假设:
下面的答案有一种假设你想传播 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 时,您将陷入合并地狱。