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

时间:2020-06-01 14:01:46

标签: git version-control migration tfvc git-tfs

我正在尝试将单个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 repo中,但是我专注于此问题的核心问题。目前,我将每个迁移到单独的仓库中,然后使用子模块将它们粘合在一起。

1 个答案:

答案 0 :(得分:1)

您可以分两个步骤进行操作,首先使用git-tfs工具执行迁移。您将需要为迁移选择一个最小变更集。如果要包括特定分支,则应至少在分支之前包括变更集:

# 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是存储库中唯一保留的目录。您也可以使用此工具重命名目录和标签。