【问题标题】:Migrate only part of TFS repository to Git on Azure DevOps仅将 TFS 存储库的一部分迁移到 Azure DevOps 上的 Git
【发布时间】:2019-07-15 19:43:11
【问题描述】:

我是一家公司的新手,我的老板希望我建立一个合适的 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 个加载问题。我很抱歉,但这是一个棘手的情况。提前谢谢你。

【问题讨论】:

  • 你关心保留历史吗?如果没有,这很容易。如果是这样,那就更棘手了。我通常建议丢弃历史记录——您仍然可以将 TFVC 存储库作为参考点。
  • 看来我们不会带回历史。太麻烦了,回报很少。

标签: git tfs azure-devops git-tfs git-tf


【解决方案1】:

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

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

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

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

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

关于(我的)答案:

我如何将这些解决方案中的一种仅放入单个 Git 存储库中

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

如果您是 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/ 等的目录。 (注意:我的名字比示例中的名字好得多)。一旦你有了这个,从所需的 TFVC 分支获取最新的并敲定。

可能会头痛

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

【讨论】:

    【解决方案2】:

    第 2 点)更容易迁移。

    所以应该没有太大问题,使用类似的命令:

    git tfs clone https://tfs.codeplex.com:443/tfs/Collection $/project/trunk --branches=none
    

    https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md#fetch-all-the-history-for-just-the-main-branch-ignoring-all-the-other-branches

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 2020-01-13
      • 2023-03-03
      • 2019-04-17
      • 2014-10-20
      • 2020-01-06
      • 1970-01-01
      • 2019-06-05
      • 2021-07-30
      相关资源
      最近更新 更多