" - 树过滤器"之间有什么区别?和" - index-filter"在" git filter-branch"?

时间:2016-03-28 02:51:39

标签: git

我学习"树"和"索引"来自这个aritcle:Learning Git Internals by Example

但是当它来到" git filter-branch"命令,我不知道" - tree-filter"之间的区别。和" - index-filter"。

1 个答案:

答案 0 :(得分:10)

简短版本是--tree-filter检出每个提交到一个临时目录,运行你的过滤器命令,并从临时目录中的任何内容构建一个新的提交;而--index-filter将每个提交复制到索引中,运行您的过滤器命令,并从索引中现在的任何内容构建新的提交。

将提交复制到索引比检查提交更快 1 。从索引构建提交比从目录构建提交更快。因此,使用索引过滤器比使用树过滤器快得多。但是,编写脚本并不容易。

1 确切的速度差异取决于您的临时目录:内存文件系统比on-SSD文件系统更快,这比在旋转介质上更快,因此您获得更多如果您使用旋转介质,则可以将树过滤器指向内存中的文件系统。但即使这样,索引过滤器仍然更快。

在实际的磁盘上,我已经看到大约100左右(因此索引过滤器需要2分钟转换为需要3小时以上的树过滤器)。