我没有在开发计算机上设置用户名,而是进行了一些提交。我是否可以追溯更改用户名,以便清楚是谁提交了这些更改集?
Answers:
如果您尚未发布存储库,那么这应该不太困难。您需要使用Convert扩展为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 log --template '{author}\n'|less
,尚未使它起作用-不了解authormap-东西。
我尝试了几种不同的方法(包括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 <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
这样就完成了。您的存储库仍被列为相关存储库,因此您不会对推送有任何抱怨。
/
在结束引号之前需要尾随,否则perl
命令产生错误Substitution replacement not terminated at -e line 1
。否则完美,谢谢!
我使用了histedit
扩展名,该扩展名使我可以更改作者,而无需进行新的回购,例如“ convert”或求助于“ 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
。
提交将与您的new一起出现username
。副作用是提交的时间戳也会被更新。