如何检查 Git 提交是否已签名

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何检查 Git 提交是否已签名。提交签名是验证项目历史真实性和完整性的重要实践。

通过实际操作步骤,你将探索如何使用 git log --show-signature 命令查看提交的签名信息,以及使用 git verify-commit 命令检查特定提交的签名。你还将学习如何测试和识别未签名的提交,从而全面了解如何确保 Git 仓库的可信度。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560065{{"如何检查 Git 提交是否已签名"}} git/status -.-> lab-560065{{"如何检查 Git 提交是否已签名"}} git/commit -.-> lab-560065{{"如何检查 Git 提交是否已签名"}} git/log -.-> lab-560065{{"如何检查 Git 提交是否已签名"}} end

运行 git log --show-signature

在这一步中,我们将探索如何使用 git log 命令查看提交签名。提交签名是一种验证提交者身份的方式,为项目历史增添了额外的可信度。

首先,如果你还没有进入项目目录,请导航到该目录。记住,我们的项目位于 ~/project/my-time-machine

cd ~/project/my-time-machine

现在,让我们使用 --show-signature 选项查看提交日志。该选项会让 Git 显示每个提交的签名信息(如果存在的话)。

git log --show-signature

你应该会看到之前提交的日志,由于我们尚未配置提交签名,所以不会看到任何签名信息显示。输出内容大致如下:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

git log --show-signature 命令对于验证项目中提交的真实性至关重要。在团队协作或参与开源项目时,提交签名有助于确保你正在审查或使用的提交来自可信来源。没有签名,就很难确定更改的来源。

在接下来的步骤中,我们将学习如何配置 Git 对提交进行签名,以及如何验证这些签名。

使用 git verify-commit 进行检查

在这一步中,你将学习如何使用 git verify-commit 命令来检查特定提交的签名。当你想要验证单个提交的真实性,而不是查看日志中所有提交的签名状态时,这个命令非常有用。

首先,确保你位于项目目录中:

cd ~/project/my-time-machine

要使用 git verify-commit,你需要知道想要验证的提交的哈希值(唯一标识符)。你可以从 git log 的输出中获取这个哈希值。对于我们的第一次提交,哈希值是一长串字符。你只需要前几个字符(通常 7 个就足够了)来识别该提交。

让我们使用 git log --oneline 来获取提交哈希值:

git log --oneline

这将显示简化的日志输出,如下所示:

a1b2c3d (HEAD -> master) Send a message to the future

a1b2c3d 部分就是简短的提交哈希值。复制这个哈希值。

现在,使用 git verify-commit 命令,后面跟上提交哈希值。将 YOUR_COMMIT_HASH 替换为你复制的实际哈希值:

git verify-commit YOUR_COMMIT_HASH

由于我们的提交没有签名,你可能会看到一条输出,表明没有签名或者无法验证签名。这是预期的结果,因为我们还没有配置 Git 对提交进行签名。输出可能如下所示:

object YOUR_COMMIT_HASH
type commit
tag -1
tree 8a9b0c1d2e3f4g5h6i7j8k9l0m1n2o3p4q5r6s7t
parent u1v2w3x4y5z6a7b8c9d0e1f2g3h4i5j6k7l8m9n0
author Jane Doe <[email protected]> 1678886400 +0000
committer Jane Doe <[email protected]> 1678886400 +0000

Send a message to the future

git verify-commit 命令是检查提交详细信息(包括其签名状态)的强大工具。它可以帮助你确认提交没有被篡改,并且来自可信来源,这对于维护项目历史的完整性至关重要。

在下一步中,我们将创建一个新的提交,并查看当我们尝试验证未签名的提交时,Git 会如何处理。

测试未签名的提交

在这一步中,我们将创建另一个未签名的提交,并观察当使用上一步学到的验证命令时,Git 会如何处理它。这将加深你对 Git 如何识别未签名提交的理解。

首先,确保你位于项目目录中:

cd ~/project/my-time-machine

让我们在 message.txt 文件中再添加一行内容:

echo "This is a second message." >> message.txt

>> 操作符会将文本追加到现有文件中。现在,让我们检查一下状态:

git status

你应该会看到 message.txt 已被修改:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

现在,让我们暂存这些更改并创建一个新的提交。我们不会对这个提交进行签名。

git add message.txt
git commit -m "Add a second message"

你会看到确认新提交的输出:

[master a1b2c3d] Add a second message
 1 file changed, 1 insertion(+)

现在我们有了第二个未签名的提交,让我们再次使用 git log --show-signature 来查看提交历史:

git log --show-signature

你会在日志中看到这两个提交。由于我们还没有配置签名,所以都不会显示签名信息。

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Add a second message

commit u1v2w3x4y5z6a7b8c9d0e1f2g3h4i5j6k7l8m9n0
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

最后,让我们对新提交使用 git verify-commit 命令。使用 git log --oneline 获取最新提交的短哈希值,并替换下面的 YOUR_NEW_COMMIT_HASH

git log --oneline
a1b2c3d (HEAD -> master) Add a second message
u1v2w3x Send a message to the future

现在验证新提交:

git verify-commit YOUR_NEW_COMMIT_HASH

同样,输出将显示提交的详细信息,但没有签名验证状态,这证实了这个提交也是未签名的。

这一步表明,默认情况下,Git 提交是不签名的。为了增加安全性和可信度,你需要显式地配置 Git 对提交进行签名,这是一个更高级的主题,我们不会在这个入门实验中涉及。然而,理解如何使用 git log --show-signaturegit verify-commit 来识别未签名的提交,是处理签名提交的第一步。

总结

在这个实验中,我们学习了如何检查 Git 提交是否已签名。首先,我们使用 git log --show-signature 命令查看项目历史中所有提交的签名状态。这个命令对于快速评估提交的真实性至关重要。

接下来,我们探究了 git verify-commit 命令,它允许我们使用提交的哈希值来验证特定提交的签名。这对于有针对性的验证很有用。最后,我们测试了未签名的提交,以了解在检查签名时它们的显示情况。这些步骤为你提供了在 Git 中验证提交真实性的基础理解。