我正在尝试将我的SVN项目导入Git。我在SVN中有以下目录结构:
trunk
-- AAA
-- UUU
-- PPP
-- QQQ
在Git中,我希望这是:
master branch
-- AAA
-- UUU
PQ-branch
-- PPP
-- QQQ
如何在保留目录的所有提交历史记录的同时实现此目的?
我尝试使用Git子树拆分将PPP和QQQ拆分为单独的分支,但如何从主分支中删除PPP和QQQ的提交历史记录?
我尝试使用带有--tree-filter
的filter-branch,但这没有帮助。
答案 0 :(得分:0)
您可以使用git svn clone
将不同的子目录分别克隆为分支。一旦你准备好这个,棘手的部分开始,即重写git历史,你缝合/加入两个分支,AAA和UUU,作为主和休息作为分支PQ。
您可以使用git graft
或git replace
执行此操作。在重写git历史记录时要小心。您可以在https://git.wiki.kernel.org/index.php/GraftPoint或https://git-scm.com/blog/2010/03/17/replace.html阅读更多信息。
要找到移植点,您需要找到两个分支(AAA和UUU)之间的最后一个常见提交,这是您的移植点。找到这个的最简单方法是在两个分支中搜索具有相同时间戳的提交。一旦找到此提交,您就有了移植点