我有一个有效包含许多不同模块的存储库。我想把它拆分成单独的存储库,保存这些存储库中文件的版本历史记录。
解决这个问题的一个简单方法就是克隆repo,然后执行类似
的操作git filter-branch \
--tree-filter $'find -type f \
| grep -vF <(echo "file1\nfile2\n...") -- --all \
| xargs rm' --prune-empty -- --all
但是(假设我的未经测试的脚本编写正确)将删除具有给定名称的所有文件。
我真正想要做的是遍历提交历史记录,查找和删除 任何这些文件的文件。因此,如果将file_a
重命名为file_b
14次提交,并且(当前)file_b
应该是此回购的一部分,则应保留旧的file_a
在回购中也是如此。
这应该向两个方向延伸;即如果还有另一个分支,其中file_a
从未重命名,它应该真的 - 或者实际上有点含糊不清。 file_a
的定义取决于特定的分支。我想要的(我认为..)是指定一组blob,例如HEAD:file_b
,并让过滤器消除所有不属于其中一个blob历史记录的blob。