扫描git对象进行提交而无需签出

时间:2019-05-12 23:53:30

标签: git git-checkout

是否可以在不运行git checkout的情况下读取与git commit有关的所有文件?提交是否指向.git文件夹中的一堆斑点?有没有一种方法可以直接在给定提交ID的情况下读取这些Blob?还是运行git checkout更直接?我只是试图审核文件中的漏洞,例如纯文本密码等。

3 个答案:

答案 0 :(得分:1)

有一个git unpack-file $blob_id,它会将带有斑点名称的blob内容的副本放置在工作树根上,并打印出来。

还有git cat-file --batch,它采用可选格式和一些其他调整,并通过管道传输所有请求的输出。如果您可以控制审核工具的输入处理,那么这将是迄今为止最有效的:

git ls-files -s | cut -d' ' -f2- \
| git cat-file --batch='%(objectname) %(objectsize) %(rest)' \
| your audit tool

对于提交,它将开始git ls-tree -r $thatcommit | cut -d' ' -f3-

答案 1 :(得分:1)

在Orden中查看对象(并在stdout上获取它),您可以执行以下操作:

git show some-branch-or-revision:file-path
git cat-file -p object-id

其中任何一种都可以。

答案 2 :(得分:1)

...并查看提交使用中包含的文件列表

git ls-tree -r <commit id>

此列表将包含文件数据的Blob ID,因此您可以使用其他答案中提到的cat-file。