在Git

时间:2015-09-11 12:47:42

标签: git

我正在开发一个项目,我在每个git push上分析源代码。我正在寻找提高性能/可扩展性的方法。

简单的实现是对我想要分析的代码(提交)的特定版本执行“git checkout”。这将部署硬盘上的所有文件,然后我可以逐个读取所有文件并进行分析。然而,这涉及大量的IO,并且无论是否尝试并行化分析代码的算法都会导致无效。

我对Git内部的理解是git将文件存储为“blob”对象(在.git文件夹中保存为磁盘上的文件)。在某些情况下,它可能只存储版本之间的差异以节省磁盘空间。因此,无法避免每个文件至少执行一次读取。

我想知道是否有办法从这些blob重新创建所有文件的内容,就像git使用“git checkout”一样,但是不是在磁盘上部署文件,所有文件的内容都会作为一个输入流传递到算法中,跳过额外的写/读操作。然后,程序可以根据需要/可能并行执行算法,以提高性能。

我是怎么做到这一点的?是否有一个git“plumbing”工具/命令可以帮助解决这个问题,或者我是否需要查看git的源代码?

1 个答案:

答案 0 :(得分:0)

看起来实现本机性能而不必调用git本身的最佳选择是使用实现git核心方法的libgit2库,并且有多种语言绑定可用。此语言中git ls-tree <treeish>git show <treeish>:<file>的等效项将执行问题中的特定任务。

https://libgit2.github.com

“libgit2是Git核心方法的可移植纯C实现,作为具有可靠API的可重入链接库提供,允许您使用支持C绑定的任何语言编写本机速度自定义Git应用程序。” p>