2013-05-02 63 views
0

想知道如何通过git中的所有提交列表(或所有来自单个分支)。 git log如何做到这一点(指向部分代码也会很酷,我只是不知道从哪里开始)?我能以某种方式在原始文件系统上执行此操作吗?如何遍历较低级别的git仓库(比git log)

推理是:需要用其他语言编写的工具不需要调用系统命令。

更新:我读过Git internals: Git objects(和后面的章节),我明白,也有包文件。我所遇到的主要问题是在运行时了解发生了什么事情:git rev-list --all。或者 - 对于单个分支 - 没有--all标志的相同命令。 git是否会将头部拉出来,将其从它的对象存储中拉出来,检查父母的皮肤,从对象存储中拉出那些东西?还是有其他更快的方法?

+3

读http://git-scm.com/book/en/Git-Internals,尤其是http://git-scm.com/book/en/Git-Internals-Git-Objects – 2013-05-02 16:09:39

回答

2

不知道你是否已经碰到过这样的: LibGit2https://github.com/libgit2/libgit2

libgit2是一种便携式,纯C语言实现的Git的核心方法 为重入链接库提供使用可靠的API,允许您使用 绑定编写任何语言的原生速度自定义Git应用程序 。

它的一个开源的,通过代码浏览,应该给你一些宝贵的意见.. 如:Commit.c

0

分支是在.git/refs文件夹单纯的文件,每个文件都包含了电流的SHA1分支尖端。此外,git gc之后的所有参考文献都可以收集在.git/packed-refs文件中。