将目录移动到另一个git存储库,同时保留相关历史记录

时间:2013-06-13 08:39:46

标签: git

我有一个包含多个组件的git存储库,每个组件都在自己的目录中。我现在想把每个组件放在自己的git repo中。这里的一个要求是git历史不会丢失,所以git blame仍然有用。我正在寻找一种方法来做到这一点,并没有无关的git历史。这有两个原因:我不希望repo历史变得混乱,代码的变化不是组件的一部分,我喜欢提交计数和历史记录中的其他东西是合理准确的。

我已经看过正确方向的this helpful post。然而,它并没有完全删除无意义的提交(所以现在历史上有很多空提交)。它也不保留过去从某些其他组件移动的文件的历史记录(排除该组件的情况),或者即使它们触及了也触及忽略组件中的文件的提交。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

git filter-branch有一个专门的模式,用于将存储库减少到子目录。查看选项--subdirectory-filter。它应该自动删除不相关的提交,并将子目录的内容移动到repo的顶层。

但是,它不会跟踪/关注文件重命名。如果你想要的话,你正在看很多手工作品。毕竟,您必须在旧位置包含对文件的更改,但还要重写重命名后位置的路径。我们没有任何与git一起提供的功能。