示例场景:
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?
答案 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系统,旨在解决这类问题,我不确定它是否仍在开发中。
我最终会得到一个哲学观察:如果一个项目必须保护自己免受这种问题(一个授权的开发者冒充另一个),那么这个项目可能还有其他问题......再次,这并不意味着验证提交并不重要。