检查谁在 mercurial HG 中推送了提交

Check who pushed the commit in mercurial HG

示例场景:

revision #100 - user1 makes a commit on DEV branch in 2017-01-01
revision #101 - user2 cherry picked user1's commit to master branch (hg graft -r 100) in 2017-01-02

汞柱:

changeset:101
user: user1
date: 2017-01-01
summary: message 100

changeset:100
user: user1
date: 2017-01-01
summary: message 100

但是我怎么知道 user2 推送了修订版 #101?

你不能(除了 Lasse 在他的评论中提出的建议)。

考虑:

touch a; hg add a; hg commit -m 'Add a as myself'
touch b; hg add b; hg commit -m 'Add b as you' --user you@foo.com
hg update 0
hg branch stable
hg graft --user 3rd@bar.com --force 1


hg log --graph

@  changeset:   2:3078a4888a8a
|  branch:      stable
|  tag:         tip
|  parent:      0:f7fa0d60eaf2
|  user:        3rd@bar.com
|  date:        Fri Apr 28 20:07:35 2017 +0200
|  summary:     Add b as you
|
| o  changeset:   1:e12471b861d6
|/   user:        you@foo.com
|    date:        Fri Apr 28 20:07:35 2017 +0200
|    summary:     Add b as you
|
o  changeset:   0:f7fa0d60eaf2
   user:        This Is Me me@me.com
   date:        Fri Apr 28 20:06:42 2017 +0200
   summary:     Add a as myself

如果你仔细想想,它并没有看起来那么令人震惊(请注意,我并不是说这不是问题)。

Mercurial 有一个 extension to perform PGP signatures 这可能会有所帮助,但事后并需要一定的设置。

要详细解释,看CommitSigningPlan,虽然我不知道状态。

据我所知,monotone是为解决此类问题而设计的分布式VCS系统,不知道是否还在开发中。

我会以一个哲学观察作为结束:如果一个项目必须保护自己免受此类问题的影响(授权开发人员冒充另一个人),那么该项目可能还有其他问题......同样,这并不意味着验证提交并不重要。