有没有一种方法可以不运行git checkout就读取所有与git commit相关的文件?中的一堆blob。git文件夹?有没有一种方法可以直接读取这些blob给一个提交id?还是运行git checkout更简单?我只是想审计文件的漏洞,如纯文本密码等。
git checkout
nxowjjhe1#
为了查看一个对象(并在stdout上获取它),你可以这样做:
git show some-branch-or-revision:file-path git cat-file -p object-id
这两个都行
prdp8dxp2#
...并查看提交使用中包含的文件列表
git ls-tree -r <commit id>
此列表将包含文件数据的blob id,因此您可以使用其他答案中提到的cat-file。
lbsnaicq3#
有一个git unpack-file $blob_id,它将blob内容的一个副本放在工作树根上,并打印一个垃圾名称。还有git cat-file --batch,它采用可选格式和一些更多的调整,并通过管道传输所有请求的输出。如果您已经控制了审计工具的输入处理,那么这将是迄今为止最有效的:
git unpack-file $blob_id
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-开始
git ls-tree -r $thatcommit | cut -d' ' -f3-
gev0vcfq4#
另一种方法是Git 2。38(2022年第三季度):“git ls-files“(man)学习--format选项来调整其输出。因此,jthill的answer使用:
git ls-files
--format
git ls-files -s | cut -d' ' -f2-
git cat-file --batch='%(objectname) %(objectsize) %(rest)'
你可以直接用Git 2来做。38+,前面是git unpack-file:
git unpack-file
git unpack-file $blob_id git ls-files --format='%(path) %(objectname) %(objectsize)'
请参阅commit ce74de9(2022年7月23日)。(由Junio C Hamano -- gitster --合并至commit 8e56aff,2022年8月3日)
gitster
ls-files
签字人:胡哲宁添加一个新选项“--format”,它以自定义格式输出索引条目信息,灵感来自git ls-tree(man)命令中同名的选项。“--format”不能与“-s”、“-o”、“-k”、“-t”、“--resolve-undo”、“--deduplicate”和“--eol”一起使用。git ls-files现在在其手册页中包括:
git ls-tree
-s
-o
-k
-t
--resolve-undo
--deduplicate
--eol
--format=<format>
从显示的结果中插入%(fieldname)的字符串。它还将%%内插到%,并将%xx内插到十六进制码为xx的字符,其中xx是十六进制数字;例如,%00插值到\0(NUL),%09插值到\t(TAB),%0a插值到\n(LF)。--format不能与-s、-o、-k、-t、--resolve-undo和--eol组合使用。git ls-files现在在其手册页中包括:可以使用--format选项以自定义格式打印,该选项能够使用%(fieldname)符号插入不同的字段。例如,如果您只关心“objectname”和“path”字段,则可以使用特定的“--format”执行,如git ls-files --format='%(objectname)%(path)'
%(fieldname)
%%
%
%xx
xx
%00
\0
%09
\t
\n
每个路径的显示方式可以通过使用--format=<format>选项进行自定义,其中<format>字符串中用于索引条目各个方面的%(fieldname)被插值。理解以下“字段名”:
<format>
objectmode
记录在索引中的文件的模式。
objectname
记录在索引中的文件的名称。
stage
记录在索引中的文件的阶段。
eolinfo:index
eolinfo:worktree
索引或路径工作树中内容的<eolinfo>(请参见--eol选项的说明)。
<eolinfo>
eolattr
适用于路径的<eolattr>(请参阅--eol选项的说明)。
<eolattr>
path
记录在索引中的文件的路径名。注意:如果您使用的是git ls-files --format="%(path),use Git 2.41 (Q2 2023)。
git ls-files --format="%(path)
4条答案
按热度按时间nxowjjhe1#
为了查看一个对象(并在stdout上获取它),你可以这样做:
这两个都行
prdp8dxp2#
...并查看提交使用中包含的文件列表
此列表将包含文件数据的blob id,因此您可以使用其他答案中提到的cat-file。
lbsnaicq3#
有一个
git unpack-file $blob_id
,它将blob内容的一个副本放在工作树根上,并打印一个垃圾名称。还有
git cat-file --batch
,它采用可选格式和一些更多的调整,并通过管道传输所有请求的输出。如果您已经控制了审计工具的输入处理,那么这将是迄今为止最有效的:对于提交,它将从
git ls-tree -r $thatcommit | cut -d' ' -f3-
开始gev0vcfq4#
另一种方法是Git 2。38(2022年第三季度):“
git ls-files
“(man)学习--format
选项来调整其输出。因此,jthill的answer使用:
git ls-files -s | cut -d' ' -f2-
获取每个文件提交git cat-file --batch='%(objectname) %(objectsize) %(rest)'
你可以直接用Git 2来做。38+,前面是
git unpack-file
:请参阅commit ce74de9(2022年7月23日)。
(由Junio C Hamano --
gitster
--合并至commit 8e56aff,2022年8月3日)ls-files
:引入“--format”选项签字人:胡哲宁
添加一个新选项“
--format
”,它以自定义格式输出索引条目信息,灵感来自git ls-tree
(man)命令中同名的选项。“
--format
”不能与“-s
”、“-o
”、“-k
”、“-t
”、“--resolve-undo
”、“--deduplicate
”和“--eol
”一起使用。git ls-files
现在在其手册页中包括:--format=<format>
从显示的结果中插入
%(fieldname)
的字符串。它还将%%
内插到%
,并将%xx
内插到十六进制码为xx
的字符,其中xx
是十六进制数字;例如,
%00
插值到\0
(NUL),%09
插值到\t
(TAB),%0a插值到\n
(LF)。--format
不能与-s
、-o
、-k
、-t
、--resolve-undo
和--eol
组合使用。git ls-files
现在在其手册页中包括:可以使用
--format
选项以自定义格式打印,该选项能够使用%(fieldname)
符号插入不同的字段。例如,如果您只关心“objectname”和“path”字段,则可以使用特定的“
--format
”执行,如git ls-files --format='%(objectname)%(path)'
域名
每个路径的显示方式可以通过使用
--format=<format>
选项进行自定义,其中<format>
字符串中用于索引条目各个方面的%(fieldname)
被插值。理解以下“字段名”:
objectmode
记录在索引中的文件的模式。
objectname
记录在索引中的文件的名称。
stage
记录在索引中的文件的阶段。
eolinfo:index
eolinfo:worktree
索引或路径工作树中内容的
<eolinfo>
(请参见--eol
选项的说明)。eolattr
适用于路径的
<eolattr>
(请参阅--eol
选项的说明)。path
记录在索引中的文件的路径名。
注意:如果您使用的是
git ls-files --format="%(path)
,use Git 2.41 (Q2 2023)。