如何在存储库中签署每个(甚至是旧的)提交?

时间:2013-11-22 13:50:32

标签: git gnupg

请注意,我说的是GPG签名(-S),而不是“签收”功能(-s)!


我有一个git存储库,我想在其中签署所有我的提交,即使它们真的是旧的提交。我知道,这将改变历史,而基于此回购的其他人将无法再推动他们的改变。这对我来说不是 问题,我完全了解其含义。

我正在考虑rebase -i命令,但之后我会丢失所有分支信息并将整个历史记录弄平。另外,有些提交不是由我提出的,我希望保持原样。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

你是正确的,重写已发布的历史记录会对你的合作者造成不满。

对于您想要执行的操作,我建议您创建新的签名标记。假设你提交的一个提交的SHA-1是abc123。在这种情况下,运行

$ git tag -s abc123

有关详细信息,请参阅git tag documentation

答案 1 :(得分:2)

这样可以解决问题:

git filter-branch --commit-filter 'git commit-tree -S "$@"'

然而,梅加尔的观点是正确的。签署一个提交是“哲学上”等同于签署所有以前的提交。

答案 2 :(得分:0)

嗯,两天后,@ meagar还没有重新格式化它作为答案,所以这里是:

  

这没有任何意义。这不是你应该做或不需要做的事情,   或者是受支持的行为。只需签署当前提交。整个   签名点是,通过签署提交,您将签署所有   以前的提交。根据定义,任何给定的提交都是所有提交的总和   以前的提交。你签了一个,你已经暗中签了字   每个提交都可以从您签名的提交中获得。

他的评论非常有意义并回答了我的问题!在图中有一个签名提交,有效地在该分支上添加“批准标记”直到“开始时间”。这就是我真正想要的。签署每个提交是不必要的!

如果您有多个未合并的分支,则可以对每个分支进行“签名”提交。