Git:探索遥控器中的物体

时间:2017-02-26 18:07:19

标签: git git-remote

我正在使用Git进行一些高级用法,查询对象以优化我的代码的测试运行,所以如果以下内容听起来与大多数人使用Git的用法相差甚远,请耐心等待。

我想做git cat-file -p [...]之类的事情,除了遥控器上的物体,没有抓取它们。即,我想说,“在远程origin上,告诉我提交A,具体告诉我它的树的id是什么;然后告诉我树的内容(blob和子树的列表。 )“我不需要获取文件的实际内容,只需要获取上述信息。

我知道我可以从远程设备获取提交到我的本地仓库并在其上使用git cat-file,但之后它将涉及从远程提取所有提交的父项,这可能需要很长时间时间。我需要这个很快,因为它是在一个程序中完成的,该程序应该每天在许多不同的存储库上运行数百次。

有没有办法在不提取提交的情况下执行上述操作?

1 个答案:

答案 0 :(得分:1)

我认为您已经确认git fetch --depth=...没有做您想做的事。

如果你有ssh/scp访问远程的权限,你可以简单地获取该提交的个人文件(如果提交为哈希a1b2c3d4,它存储在文件objects/a1/b2c3d4内) 。将其放在同一目录/名称下的本地.git/objects中。然后像往常一样使用本地git cat-file。从输出中,您可以解析树的哈希值,然后从那里继续,获取单个目标文件直到完成。 git cat-file并不关心任何丢失的位,如果你有一个文件存在的哈希值,它会愉快地输出它的内容。

为避免“真正的”本地存储库出现问题,您可以在空存储库中执行此操作,即使用git init tmprepos创建的存储库或其他存储库。那里没有别的东西也没什么坏处。

编辑:git将一些对象存储在pack文件中。有关如何获取这些内容的说明,请参阅https://git-scm.com/book/en/v1/Git-Internals-Transfer-Protocols