git 消除笔记中的blob和文件中的其他blob之间的歧义?

q9yhzks0  于 2023-04-28  发布在  Git
关注(0)|答案(2)|浏览(87)

我怎么知道下面的blob,e.例如,提取物如下:

["text", "143e875f50d1f6b645750cfc3d146842a3644eaa",30,40,"89/accfaa73947d063acb5e4dccf6a4816226e1ec"]

浸提液

echo "Get all blobs > ${fileSizeThreshold} bytes."
git rev-list --objects "${what}" \
| git cat-file --batch-check='"%(objecttype)","%(objectname)",%(objectsize),%(objectsize:disk),"%(rest)"' \
| sed -n 's/^"blob",//p' \
| awk -F',' '$2'">= ${fileSizeThreshold}" \
| sort -t "," --numeric-sort --key=2 > ${outDir}/largeBlobs

不是提交中note部分的blob:我用svn2git转换。我看到这个sha1哈希包含在git notes中,它输出所有的note blob。..

ars1skjm

ars1skjm1#

blob只是Git存储文件数据的方式。
假设你做了一个笔记,其内容需要一个包含89/accfaa73947d063acb5e4dccf6a4816226e1ec的blob,* 和 * 由于某种原因 * 我 * 存储了一个实际的 * 文件 *,其内容是89/accfaa73947d063acb5e4dccf6a4816226e1ec。一个blob对象将用于保存这两个项目。
因此,关键不在于事后消除歧义,而在于列举任何感兴趣的内容。特别是:

git rev-list --objects "${what}"

应该直接发送到--objects上的git rev-list文档部分,其中说:

--对象

打印列出的提交引用的任何对象的对象ID。--objects foo ^bar的意思是“如果我有提交对象 bar 但没有 foo,请将我需要下载的所有对象ID发送给我”。
因此,git rev-list将遍历的提交树列表是由${what}参数决定的,您没有显示这个参数。

zaq34kh6

zaq34kh62#

此外,git rev-list --objects并不孤单:你也有git rev-list --object-names
Git 2.41(2023年第2季度)记录了输出“rev-list --object“中的路径名字符串的用途和含义。
参见commit 15364d2(2023年3月28日),作者Jeff King ( peff )
(由Junio C Hamano -- gitster --合并于commit abb3b69,2023年4月4日)

docsrev-list输出的文档警告

签字人:杰夫·金
乍一看,“rev-list --objects”给出的名称似乎是查看提交集中存在哪些路径的好方法。
但也有一些微妙的gotchas那里。
我们根本不记录名称的格式,所以让我们这样做,沿着警告这些问题。
我故意没有在这里记录名称的确切格式,因为我不认为这是我们希望人们依赖的东西(尽管我怀疑在实践中,我们会在这一点上改变它)。
虽然所有这些在历史上都与“--objects”绑定,但现在我们有一个单独的“--object-names”标志,可以关闭或打开名称。
所以我把详细的文档放在那里,但是添加了一个来自--objects的注解(它根本没有提到这些名称,尽管它们在默认情况下是打开的)。
rev-list-options现在在其手册页中包括:
object _bar_而不是_foo_''。另请参见下面的--object-names
rev-list-options现在在其手册页中包括:
请注意,每个对象的“名称”都是不明确的,主要是作为 Package 对象的提示。
特别是:标签、树和斑点的名称之间没有区别;可以修改路径名以删除换行符;并且如果对象将以不同的名称出现多次,则仅示出一个名称。

相关问题