6

我想为软件开发建立一条值得信赖的道路。这意味着代码的每一次更改都必须由作者和一名审阅者签名,然后才能被接受。这些更改的签名在发布时必须是可验证的,或者必须有一些其他方法来确保存储库不会被篡改,或者添加其他更改。

我期望为此使用的版本控制系统是 git,但也接受其他选项。可以通过 GnuPG 或 SSL 证书进行签名。

我想的工作流程大致是:

  1. 当前已验证的主干已分支
  2. 更改由一名或多名开发人员在分支中开发
  3. 一名或多名开发人员签署分支所做的更改
  4. 审阅者审查并测试更改
  5. Reviewer 对分支所做的更改进行签名
  6. 分支“合并”到当前已验证的主干中

合并不必是万无一失的,例如未经审查的更改需要不可合并到主干 - 只是在发布之前,需要有一种方法来检查主干中是否有任何未经审查(未签名)的更改。通常,不需要防止篡改,只需检测到即可。

我想要一份关于如何设置以及如何完成每个操作的简短指南。一旦我得到一些指示,我就可以自己弄清楚细节。

另外,我在技术上已经知道'git tag -s',但我不确定如何将它应用于这个特定问题。

4

3 回答 3

2

在您标记之前,不会对更改进行签名。在此之前的任何内容都可以由作者或其他带外机制验证,但不能从 git 内部验证。

git 可以验证更改的继承是否正确,但只有签名标签才能验证更改本身是否正确。

对于您的工作流程,您可能会发现自己标记了很多。

于 2010-03-11T09:44:27.823 回答
0

Git 是一个很好的候选者,因为:

  • 每个提交都已签名
  • 每次提交的 SHA1 密钥足以确保所有repo 未被修改
  • git tag -s 可用于签署某人未做出的提交(git tag -m更明确

所以:

  1. 当前已验证的主干已分支
    git checkout -b tag_for_last_verified_trunk_content test # 分支测试
  2. 更改由一名或多名开发人员在分支中开发
    [工作...] git commit -s -m "dev1 comment" ...
  3. 一名或多名开发人员签署分支所做的更改

    已经完成了他们的提交,通过在提交消息的末尾添加一个 Signed-of 行:请参阅此页面以获取有关签署过程的说明。

    签字人:用户名
  4. 审阅者审查并测试更改

    git tag -m "testing" testing # 引用当前提交,
                                    允许开发人员继续进行进一步的更改
  5. Reviewer 对分支所做的更改进行签名
    git tag -m "tested" 测试测试 # 将标签放在相同的 SHA1 上
                                         “测试”标签
  6. 分支“合并”到当前已验证的主干中
    git checkout trunk & git merge 测试

Cyryl Plotnicki-Chudyk在评论中提到,自 git 1.7.9(2012 年 1 月,此答案后将近 2 年)以来,您可以使用 GPG 签署任何您想要的提交,使用git commit -S.
(参见提交 ba3c69a9,最近在提交 df45cb3中进行了改进)

于 2010-03-11T09:04:52.410 回答
0

您可以在标签中使用带有 -s 选项的 GPG 密钥对标签进行签名 git tag -s v0.1.0

-s

   Make a GPG-signed tag, using the default e-mail address's key

但是您不能签署提交。

于 2010-03-11T09:19:27.900 回答