如何将git filter-branch命令从树过滤器转换为索引过滤器?

时间:2018-09-25 19:31:02

标签: git git-filter-branch

我正在将多个存储库合并到一个存储库中,我们希望保留历史记录和一些(共享)分支。将存在文件名冲突,因此我将每个单独存储库的内容移动到组合存储库中的子目录中。我已经尝试了许多不同的filter-branch命令,这就是我正在使用的:

$ shopt -s dotglob
$ git filter-branch --tree-filter 'mkdir <Subdirectory>; git mv -k * <Subdirectory>' --tag-name-filter cat --prune-empty -- --all

这相当慢(几小时),我需要再做几次。我应该将mkdir ...; git mv ...部分替换为什么,以便可以使用index-filter代替?我为索引过滤器找到的大多数示例仅使用git rm

1 个答案:

答案 0 :(得分:0)

这很愚蠢。我尝试了以下方法,但确实工作迅速,但它已复制而不是移动。但是我再次尝试并成功了,所以我想我第一次做得很奇怪。

$ git filter-branch --index-filter 'git ls-files -s | sed "s-\t\"*-&Subdirectory/-" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' --tag-name-filter cat -- --all