【发布时间】:2010-10-18 11:36:25
【问题描述】:
我没有在我的开发计算机上设置用户名并进行了一些提交。我可以追溯更改用户名,以便清楚是谁提交了这些更改集吗?
【问题讨论】:
-
查看以下文档。重写文档中涵盖的历史有很多缺点,因此通常不赞成。不过,这看起来是可能的。 - Editing History
标签: mercurial
我没有在我的开发计算机上设置用户名并进行了一些提交。我可以追溯更改用户名,以便清楚是谁提交了这些更改集吗?
【问题讨论】:
标签: mercurial
如果您尚未发布存储库,那么这应该不会太难。您需要使用 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
我刚刚检查过,它对我有用:)。
【讨论】:
$ hg log --template '{author}\n'|less,还没有得到它的工作 - 不了解 authormap 的东西。
如果您有一个单个输出变更集,有一个非常简单的方法可以做到这一点:
$ hg ci --amend --user "My Name <mymail@example.org>" -X "**"
如果您没有任何本地更改,则可以省略 -X "**" 选项。
【讨论】:
我尝试了几种不同的方法(包括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
你就完成了。您的存储库仍被列为相关,因此您不会收到任何关于推送的投诉。
【讨论】:
/,否则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。
提交将与您的新 username 一起出现。副作用是提交的时间戳也会更新。
【讨论】: