我没有在我的开发计算机上设置用户名并进行了一些提交。我是否可以追溯更改用户名,以便明确谁提交了这些更改集?
答案 0 :(得分:81)
如果您尚未发布存储库,那么这应该不会太难。您需要使用Convert extension到Mercurial,这将允许您“过滤”现有存储库以创建新存储库。 --authors开关允许您在过滤时为每个提交编辑作者。
如果您已发布了您的存储库,请考虑对您的用户的影响,mercurial wiki有一些reasons not to edit history。
通过将这些行添加到.hgrc:
来启用扩展程序[extensions]
hgext.convert=
编写一个文件以将旧名称映射到新名称(authors.convert.list):
user@ubuntu=real.name@my.example.com
运行转换:
hg convert --authors authors.convert.list SOURCE DEST
我刚检查过它,它适用于我:)。
答案 1 :(得分:13)
如果您有单外发变更集,则有一种非常简单的方法可以执行此操作:
$ hg ci --amend --user "My Name <mymail@example.org>" -X "**"
如果您没有任何本地更改,则可以省略-X "**"
选项。
答案 2 :(得分:12)
我尝试了几种不同的方法(包括Convert Extension,我发现它创建了一个不相关的存储库)。 editing history using 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 <f.lastname@oops.wrongurl.example.com>
现在使用您最喜欢的搜索/替换工具来修复补丁(我在这里使用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
你已经完成了。您的存储库仍然列为相关信息,因此您不会收到有关推送的任何投诉。
答案 3 :(得分:8)
我使用了histedit
扩展程序,它允许我更改作者而不会像“转换”那样使用新的回购或使用“mq”。
首先,在Mercurial配置文件中,确保正确设置了用户名并启用了histedit扩展名:
[ui]
username = Your Name <your.name@domain.org>
[extensions]
histedit =
然后,如果您想更改版本40,请使用:
hg histedit -r 40
在显示的文件中,在与修订版40对应的行上,将单词pick
更改为edit
。保存并关闭文件。
现在,hg commit
。您需要重新输入提交消息并保存。
最后,hg histedit --continue
。
提交将与您的新username
一起显示。副作用是提交的时间戳也会更新。