我从这篇文章中学到了"tree"和"index",文章链接:通过例子了解Git内部原理。但是在使用"git filter-branch"命令时,我不知道"--tree-filter"和"--index-filter"有什么区别。请帮忙解释一下。
--tree-filter会将每个提交检出到临时目录中,运行您的过滤器命令,并从临时目录中构建新提交;而--index-filter会将每个提交复制到索引中,运行您的过滤器命令,并从现在在索引中的内容构建新的提交。将提交复制到索引中比检出提交快得多。 从索引中构建提交比从目录中构建提交更快。 因此,使用索引过滤器比使用树过滤器要快得多。 不过,它不太容易脚本化。精确的速度差异取决于临时目录:内存文件系统比SSD文件系统快,后者比旋转介质快,因此如果您可以将树过滤器指向内存文件系统,则可以获得更大的收益。 但即使如此,索引过滤器仍然更快。在实际磁盘上,我看到了大约100倍左右的速度差异(因此需要2分钟的索引过滤器将转换为需要3个多小时的树过滤器)。