获取历史而不检出

hel*_*low 2 git libgit2

对于一个项目,我需要知道两个修订之间的所有提交。

通常,只需克隆存储库并检查历史记录即可。我不需要文件实际存在于文件系统中,我只对历史本身感兴趣。
由于大型存储库的性质,克隆它们可能需要一些时间。

有没有一种方法可以在最短的时间内获取历史记录(甚至两个修订之间的历史记录)?是否有可能实际上不检出文件(因为我猜这就是最耗时的时间)。

Obs*_*ian 5

这里的关键词是“ 浅克隆 ”。

签出给定的修订本本身可能会很长,但这并不是克隆存储库时最长的操作,因为在签出给定的修订本之前,所有对象都将首先被送回。

但是,您可能希望查看的--depth--shallow-since参数git clone,这将使您仅获取分支的提示直到给定点。

这样一来,您可以快速检索给定存储库的最新历史记录,这可能是您最需要的,然后在需要时git fetch再次使用它来移交分支的其余部分。

不幸的是,据我所知,本身不可能检索唯一的历史记录,因为该历史记录不是整体记录在某种文件中,而是由每个对象对其父对象的递归引用构成的。

因此,如果您有权访问(甚至是只读)原始子目录,则可能会做的肮脏的事情.git是复制位于以下子目录下的所有文件,.git/objects但仅复制已知的文件commit(您可以用告诉它git cat-file -t)。事情本身就被破坏了,因为在您执行操作时,树和文件本身都将不可用,但是您仍然可以通过git remote update类似的操作来获取它们。