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

时间:2017-04-26 18:14:48

标签: mercurial

示例场景:

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

hg log:

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

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

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

1 个答案:

答案 0 :(得分:0)

你不能(除了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系统,旨在解决这类问题,我不确定它是否仍在开发中。

我最终会得到一个哲学观察:如果一个项目必须保护自己免受这种问题(一个授权的开发者冒充另一个),那么这个项目可能还有其他问题......再次,这并不意味着验证提交并不重要。