man git-filter-branch 显示了一个很好的示例,说明如何重写GIT repo提交历史记录,以便更改所有提交,以便可能认为所有提交都在子目录中。基本上可以移动相应存储库中的所有文件而不会丢失历史记录。
这可用于合并两个不同的兼容存储库,这两个存储库都具有相同名称的文件/目录。
问题:可以用两种不同的方式调用此示例,为什么手册页(1.)中的1:1粘贴工作但(2.)失败?
我所做的就是重新格式化命令,这样它只需要一行。
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
重写3720c8434560995123b922597a45e16e57c0b0d9(278/278)
参考'refs / heads / master'被重写
git filter-branch -f --index-filter 'git ls-files -s | sed "s-\t\"*-&toplevel/-" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE""' HEAD
重写51662df070793ac10b6c8c9bbdca5f6f7c7b74bd(1/278)/nix/store/wiw6axjcyds0zk1nxfxk50zqs6mmfyg9-git-1.8.5.2/libexec/git-core/git-filter-branch:eval:line 329:在寻找匹配的“”时出现意外的EOF /nix/store/wiw6axjcyds0zk1nxfxk50zqs6mmfyg9-git-1.8.5.2/libexec/git-core/git-filter-branch:eval:line 330:语法错误:意外的文件结束 索引过滤器失败:git ls-files -s | sed“s- \ t \”* - & toplevel / - “| GIT_INDEX_FILE = $ GIT_INDEX_FILE.new git update-index --index-info&& mv”$ GIT_INDEX_FILE.new“”$ GIT_INDEX_FILE“”