我没有在我的开发计算机上设置用户名并进行了一些提交.我可以追溯更改用户名,以便明确谁提交了这些更改集?
如果您还没有发布您的存储库,那么这应该不会太难.您需要使用转换扩展为Mercurial,这将允许您"过滤"现有存储库以创建新存储库.--authors开关允许您在过滤时为每个提交编辑作者.
如果您已发布存储库,请考虑对用户的影响,mercurial wiki有一些不编辑历史记录的原因.
通过将这些行添加到.hgrc来启用扩展:
[extensions] hgext.convert=
编写一个文件以将旧名称映射到新名称(authors.convert.list):
user@ubuntu=real.name@my.example.com
运行转换:
hg convert --authors authors.convert.list SOURCE DEST
我刚检查过它,它对我有用:).
如果你有一个单一的传出变更,有一个很简单的方法来做到这一点:
$ hg ci --amend --user "My Name" -X "**"
-X "**"
如果您没有任何本地更改,则可以省略该选项.
我尝试了几种不同的方法(包括Convert Extension,我发现它创建了一个不相关的存储库).使用MQ编辑历史记录的Mercurial wiki说明是我发现最有帮助的.(当然,关于编辑任何公知历史的常见警告都是一个坏主意,但只有你自己的本地变更集才可以编辑).
我将总结这里的关键步骤,并澄清更改作者的机制.假设第一个错误的作者提交正在修订BAD
(并且您当然没有在任何地方发布您的更改),您应该能够执行以下操作(我假设您在存储库根目录下):
通过将此添加到$ HOME/.hg/hgrc来启用MQ
[extensions] hgext.mq=
将最近的变更集转换为补丁:
$ hg qimport -r BAD:tip
(他们现在可以找到.hg/patches
)
"取消应用"所有补丁(假设它们已被应用并反转它们),以使您的存储库进入修订状态之前BAD
:
$ hg qpop -a
如果您查看补丁,您将看到作者在所有补丁中以一种注释行编码:
$ grep User .hg/patches/* .hg/patches/102.diff:# User Firstname Lastname
现在使用您最喜欢的搜索/替换工具来修复补丁(我在这里使用Perl).假设您希望提交名称为f.lastname@righturl.example.com
:
$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
现在检查您是否已成功更改作者姓名,然后重新应用修补程序:
$ hg qpush -a
然后将应用的补丁转换为适当的变更集:
$ hg qfinish -a
而且你已经完成了.您的存储库仍然列为相关信息,因此您不会收到有关推送的任何投诉.
我已经使用了histedit
扩展,它允许我更改作者而不用像"转换"那样的新回购或使用"mq".
首先,在Mercurial配置文件中,确保正确设置了用户名并启用了histedit扩展:
[ui] username = Your Name[extensions] histedit =
然后,如果要更改版本40,请使用:
hg histedit -r 40
在出现的文件中,在与修订版40对应的行上,将单词更改pick
为edit
.保存并关闭文件.
现在,hg commit
.您需要重新输入提交消息并保存.
最后,hg histedit --continue
.
提交将与您的新提示一起显示username
.副作用是提交的时间戳也会更新.