在Azure DevOps上仅将TFS存储库的一部分迁移到Git

时间:2019-02-21 19:30:07

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

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

我有两个问题:

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

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

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

2 个答案:

答案 0 :(得分:2)

我在写这篇文章时就假设了您的策略:

以下答案具有一种假设,即您想传播re-per-sln方法。 “对我们来说,将所有内容快速放入一个git repo并在以后分离,还是逐个迁移到git,这更好吗?”是一个真正的问题要问。我只是参与了整个迁移过程的1迁移的一部分,因此协调工作非常重要,因为ppl星期五使用TFVC回家,而星期一使用Git进入。

之所以提出这一点,是因为您提到了您的老板

  

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

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

回答(我的版本):

  

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

如果解决方案是真正分开的,并且您对其他解决方案没有依赖性,则创建一个目录,该目录的名称类似于您的回购协议,并提供良好的复制粘贴处理。然后,您可以在此处初始化git repo(不要忘记为VS项目添加一个好的.gitignore文件)并提交初始更改。然后,您可以将AzDO项目存储库设置为要推送到的远程目录。

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

如果解决方案与项目和装配体引用相互依赖,则您需要在此处真正考虑策略。在我的最新迁移中,我们选择使用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带入)?

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

可能的头痛

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

答案 1 :(得分:1)

要点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

相关问题