将子目录拆分为单独的分支

Split subdirectories into separate branch

我正在尝试将我的 SVN 项目导入 Git。我在SVN中有以下目录结构:

trunk
  -- AAA
  -- UUU
  -- PPP
  -- QQQ

在 Git 中,我希望它是:

master branch
  -- AAA
  -- UUU
PQ-branch
  -- PPP
  -- QQQ

如何在保留目录的所有提交历史记录的同时实现这一点?

我尝试使用Git 子树拆分将 PPP 和 QQQ 拆分为单独的分支,但是如何从主分支删除 PPP 和 QQQ 的提交历史记录?

我尝试将 filter-branch 与 --tree-filter 一起使用,但没有帮助。

您可以使用git svn clone将不同的子目录分别克隆为分支。一旦你准备好了,棘手的部分就开始了,那就是重写 git 历史,你 stitch/join 两个分支,AAA 和 UUU,作为主分支,其余作为分支 PQ。

您可以使用 git graftgit replace 来执行此操作。重写 git 历史时要小心。您可以在 https://git.wiki.kernel.org/index.php/GraftPoint or https://git-scm.com/blog/2010/03/17/replace.html 上阅读更多信息。

要找到移植点,您需要找到两个分支(AAA 和 UUU)之间的最后一个共同提交,这是您的移植点。找出这一点的最简单方法是在两个分支中搜索具有相同时间戳的提交。一旦你找到这个提交,你就有了嫁接点