我可以更改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
一起出现。 副作用是提交的时间戳也被更新。