过滤掉其他文件,尊重重命名

时间:2010-08-24 17:08:13

标签: git blob git-filter-branch

我有一个有效包含许多不同模块的存储库。我想把它拆分成单独的存储库,保存这些存储库中文件的版本历史记录。

解决这个问题的一个简单方法就是克隆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。

0 个答案:

没有答案