将子文件夹从 TFVC 存储库迁移到 git

Migrate subfolder from TFVC repository to git

我正在尝试将单个 Core 子目录从 TFVC 存储库迁移到 git 存储库。源在多个项目中使用,其他子目录从未使用过,但需要在克隆存储库时获取。它们在概念上也是无关的。

回购布局看起来像这样:

$Project/Repo1/Main
$Project/Repo1/dev/branch1
    +branch2
    ...
    +branchN
$Project/Repo1/release/RelBranch1
...

并且每个分支都有一个扁平的文件夹结构,有重要的Core目录和加载其他未使用的目录(这些不是空的,只是与Core目录无关):

<branch-folder>
|-Core
|-Other
|-Other2
|-...
|-OtherN

我看到这种情况发生的唯一方法是使用 git-tfs 将源迁移到 git,然后在第一次提交时删除其他目录。这看起来很笨拙,对回购历史的任何调查都会带回不需要的目录吗?有没有更好的方法来实现所需的回购结构?

git 中的新布局应仅包含存储库的 Core 子目录以及所有分支和尽可能多的历史记录。幸运的是,在所有情况下,都没有引用来自 Core 目录和任何 Other 目录的文件的提交。


理想情况下,我想将来自不同 TFVC 存储库的几个子目录合并到一个 git 存储库中,但我已经专注于这个问题的核心问题。目前,我会将每个迁移到一个单独的存储库,然后使用子模块将它们粘合在一起。

您可以分两步完成此操作,首先使用 git-tfs 工具执行迁移。您将需要 select 迁移的最小变更集。如果你想包含一个特定的分支,你应该至少包含分支之前的变更集:

# make a new directory and move into it

git tfs clone $TeamURL $TFSProjectToClone .  --changeset=$MinimumChangeset --branches=auto
git tfs verify

然后您可以使用 git filter-repo 过滤存储库,readme.md 有一个示例说明如何过滤特定子目录的存储库。

git filter-repo --path src/

# Add remote and push

其中 src 是唯一保留在存储库中的目录。您还可以使用此工具重命名目录和标签。