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

我没有在我的开发电脑上设置用户名,并做了一些提交。 我是否可以追溯更改用户名,以便确定谁提交了这些更改集?

如果你还没有发布你的仓库,那么这不应该太难。 您需要使用Mercurial的Convert扩展名 ,这将允许您“过滤”现有的存储库以创build一个新的存储库。 –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 

我只是检查它,它适用于我:)。

我已经尝试了几个不同的方法(包括转换扩展 ,我发现创build了一个不相关的存储库)。 Mercurial Wiki 使用MQ编辑历史logging的说明是我发现最有帮助的。 (当然,关于编辑任何公开的历史logging通常是个不好的主意,但是只有你有可以编辑的本地变更集)。

我将总结这里的关键步骤,并阐明改变作者的机制。 假设第一个错误的作者提交是在修订版BAD (并且你还没有在任何地方发布你的改变),你应该能够做到以下几点(我假设你在版本库的根目录):

通过将其添加到$ HOME / .hg / hgrc来启用MQ

 [extensions] hgext.mq= 

将最近的变更集转换成补丁:

 $ hg qimport -r BAD:tip 

(他们现在可以find.hg/patches

“不应用”所有的修补程序(假设它们已经被应用,并将它们反转),以便在BAD之前将您的存储库置于修订状态:

 $ hg qpop -a 

如果你看看你的补丁,你会看到作者在所有补丁中都以一种注释行编码:

 $ grep User .hg/patches/* .hg/patches/102.diff:# User Firstname Lastname <f.lastname@oops.wrongurl.example.com> 

现在使用你最喜欢的search/replace工具来修复补丁(我在这里使用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 

你完成了。 您的存储库仍被列为相关的,因此您不会收到有关推送的任何投诉。

如果你有一个传出的变更集,有一个非常简单的方法来做到这一点:

 $ hg ci --amend --user "My Name <mymail@example.org>" -X "**" 

如果您没有任何本地更改,则可以省略-X "**"选项。

我已经使用了histedit扩展名,它允许我改变作者,而不用像“convert”或“mq”这样的新版本。

首先,在您的Mercurialconfiguration文件中,确保您的用户名设置正确并启用histedit扩展名:

 [ui] username = Your Name <your.name@domain.org> [extensions] histedit = 

然后,如果您想更改修订版本40,请使用:

 hg histedit -r 40 

在出现的文件中,在对应于修订版本40的行上,更改单词pick进行edit 。 保存并closures文件。

现在, hg commit 。 你需要重新input你的提交信息并保存。

最后, hg histedit --continue

提交将与您的新username一起出现。 副作用是提交的时间戳也被更新。