我可以在mercurial变更集上更改用户名吗?

时间:2009-04-09 04:37:58

标签: mercurial

我没有在我的开发计算机上设置用户名并进行了一些提交。我是否可以追溯更改用户名,以便明确谁提交了这些更改集?

4 个答案:

答案 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一起显示。副作用是提交的时间戳也会更新。