哪些 git 命令执行完整性检查?
为了确定用户多久会收到关于 git-1.7.4.1 对象数据库损坏的警告,我拉了一个位 switcheroo:
$ git init repo Initialized empty Git repository in /tmp/repo/.git/ $ cd repo $ echo 'very important info' >critical $ git add critical $ git commit -m critical [master (root-commit) c4d6d90] critical 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 critical $ git ls-tree HEAD 100644 blob 82d423c32c4bb2c52938088e0234db041bf4eaaf critical $ git show 82d423c32c4bb2c52938088e0234db041bf4eaaf very important info $ echo 'Very important info' | git hash-object --stdin -w 81a3797afe76d339db25c0f9c705a6caa47279c2 $ mv .git/objects/81/a3797afe76d339db25c0f9c705a6caa47279c2 \ .git/objects/82/d423c32c4bb2c52938088e0234db041bf4eaaf
当然,git-fsck
注意到了,
$ git fsck error: sha1 mismatch 82d423c32c4bb2c52938088e0234db041bf4eaaf error: 82d423c32c4bb2c52938088e0234db041bf4eaaf: object corrupt or missing missing blob 82d423c32c4bb2c52938088e0234db041bf4eaaf
但是 git -log
对更改感到满意
$ git log -p commit c4d6d90467af9ffa94772795d5c5d191228933c1 Author: Greg Bacon <[email protected]> Date: Thu Apr 7 12:20:53 2011 -0500 critical diff --git a/critical b/critical new file mode 100644 index 0000000..82d423c --- /dev/null +++ b/critical @@ -0,0 +1 @@ +Very important info
,git-checkout
也是如此。
$ rm critical $ git checkout . $ cat critical Very important info
对 git-show 的特定调用揭示了损坏
$ git show 82d423c32c4bb2c52938088e0234db041bf4eaaf error: sha1 mismatch 82d423c32c4bb2c52938088e0234db041bf4eaaf fatal: bad object 82d423c32c4bb2c52938088e0234db041bf4eaaf
,但没有显示更广泛的损坏。
$ git show commit c4d6d90467af9ffa94772795d5c5d191228933c1 Author: Greg Bacon <[email protected]> Date: Thu Apr 7 12:20:53 2011 -0500 critical diff --git a/critical b/critical new file mode 100644 index 0000000..82d423c --- /dev/null +++ b/critical @@ -0,0 +1 @@ +Very important info
甚至 git-clone 也没有注意到!
$ cd .. $ git clone repo clone Cloning into clone... done. $ cat clone/critical Very important info
特定 git 命令模式的完整列表是什么(例如,应该存在 git show $sha1
,但不存在 git show
或 git show HEAD
)执行完整性检查?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
以下是我如何找到这个问题,尽管我不会遍历每个源文件来找出执行检查的条件。 :)
克隆 git 的源代码:
查看您关心的版本:
查找错误消息:
这将引导您到达
object.c
和parse_object
函数。现在查找该函数:...并浏览 38 个文件,检查调用该函数的条件。
Here's how I would go about finding this out, although I'm not going to go through each source file to work out the conditions under which the check is performed. :)
Clone git's source code:
Check out the version you care about:
Look for that error message:
That leads you to
object.c
and theparse_object
function. Now look for that function:... and go through the 38 files checking the conditions under which that function will be called.
为了回应 Mark Longair 的回答,我启动了 cscope 并发现:(
请注意 cscope 如何有一个 curses 接口,并很好地集成到 Vim 中,以防你的兴趣被激起)
In response to Mark Longair's answer, I fired up cscope and found:
(note how cscope has a curses interface and integrates nicely into Vim in case your interest was piqued)
Git 2.38(2022 年第 3 季度)在
parse_object()
上添加了更多内容,服务器端响应“
git fetch
"(man) 和git 克隆
( man) 请求已得到优化,允许它发送对象存储中的对象,而无需重新计算和验证对象名称。请参阅提交 945ed00(2022 年 9 月 7 日)和 提交 9a8c3c4, 提交 0bc2557,提交 c868d8e(2022 年 9 月 6 日) )作者:杰夫·金 (
peff
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 8b2f027,2022 年 9 月 13 日)使用 Git 2.45(2024 年第 2 季度),第 5 批,upload-pack 的各个部分已已更新以限制相对于存储库大小的资源消耗,以防止滥用客户端。
请参阅 提交 6cd05e7、提交 a6ca601, 提交5f64279,提交 179776f,提交 b065063,提交 388b96d,提交 720ba25,提交fae9627(2024 年 2 月 28 日),作者:杰夫·金 (
peff
)。请参阅 提交 8c735b1(2024 年 2 月 28 日),作者:泰勒·布劳 (
ttaylorr
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 56d6084,2024 年 3 月 7 日)Git 2.38 (Q3 2022) adds more on
parse_object()
The server side that responds to "
git fetch
"(man) andgit clone
(man) request has been optimized by allowing it to send objects in its object store without recomputing and validating the object names.See commit 945ed00 (07 Sep 2022), and commit 9a8c3c4, commit 0bc2557, commit c868d8e (06 Sep 2022) by Jeff King (
peff
).(Merged by Junio C Hamano --
gitster
-- in commit 8b2f027, 13 Sep 2022)With Git 2.45 (Q2 2024), batch 5, various parts of upload-pack has been updated to bound the resource consumption relative to the size of the repository to protect from abusive clients.
See commit 6cd05e7, commit a6ca601, commit 5f64279, commit 179776f, commit b065063, commit 388b96d, commit 720ba25, commit fae9627 (28 Feb 2024) by Jeff King (
peff
).See commit 8c735b1 (28 Feb 2024) by Taylor Blau (
ttaylorr
).(Merged by Junio C Hamano --
gitster
-- in commit 56d6084, 07 Mar 2024)