我正在将多个存储库合并到一个存储库中,我们希望保留历史记录和一些(共享)分支。将存在文件名冲突,因此我将每个单独存储库的内容移动到组合存储库中的子目录中。我已经尝试了许多不同的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
。
答案 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