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

Dan*_*ein 70 mercurial

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

And*_*ett 83

如果您还没有发布您的存储库,那么这应该不会太难.您需要使用转换扩展为Mercurial,这将允许您"过滤"现有存储库以创建新存储库.--authors开关允许您在过滤时为每个提交编辑作者.

如果您发布存储库,请考虑对用户的影响,mercurial wiki有一些不编辑历史记录的原因.

通过将这些行添加到.hgrc来启用扩展:

[extensions]
hgext.convert=
Run Code Online (Sandbox Code Playgroud)

编写一个文件以将旧名称映射到新名称(authors.convert.list):

user@ubuntu=real.name@my.example.com
Run Code Online (Sandbox Code Playgroud)

运行转换:

hg convert --authors authors.convert.list SOURCE DEST
Run Code Online (Sandbox Code Playgroud)

我刚检查过它,它对我有用:).

  • 如果您解释了"SOURCE"和"DEST"应该是什么,这也会有所帮助.路径?不幸的是,即使是hg的帮助也无法解释它们是什么. (6认同)
  • 这对我不起作用.它改写了整个历史,无论我是否是作者.之后Rebase失败了.有没有办法只转换最近的,未刷新的提交? (4认同)

Sou*_*man 15

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

$ hg ci --amend --user "My Name <mymail@example.org>" -X "**"
Run Code Online (Sandbox Code Playgroud)

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


And*_*lay 13

我尝试了几种不同的方法(包括Convert Extension,我发现它创建了一个不相关的存储库).使用MQ编辑历史记录的Mercurial wiki说明是我发现最有帮助的.(当然,关于编辑任何公历史的常见警告都是一个坏主意,但只有你自己的本地变更集才可以编辑).

我将总结这里的关键步骤,并澄清更改作者的机制.假设第一个错误的作者提交正在修订BAD(并且您当然没有在任何地方发布您的更改),您应该能够执行以下操作(我假设您在存储库根目录下):

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

[extensions]
hgext.mq=
Run Code Online (Sandbox Code Playgroud)

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

$ hg qimport -r BAD:tip
Run Code Online (Sandbox Code Playgroud)

(他们现在可以找到.hg/patches)

"取消应用"所有补丁(假设它们已被应用并反转它们),以使您的存储库进入修订状态之前BAD:

$ hg qpop -a
Run Code Online (Sandbox Code Playgroud)

如果您查看补丁,您将看到作者在所有补丁中以一种注释行编码:

$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <f.lastname@oops.wrongurl.example.com>
Run Code Online (Sandbox Code Playgroud)

现在使用您最喜欢的搜索/替换工具来修复补丁(我在这里使用Perl).假设您希望提交名称为f.lastname@righturl.example.com:

$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
Run Code Online (Sandbox Code Playgroud)

现在检查您是否已成功更改作者姓名,然后重新应用修补程序:

$ hg qpush -a
Run Code Online (Sandbox Code Playgroud)

然后将应用的补丁转换为适当的变更集:

$ hg qfinish -a
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.您的存储库仍然列为相关信息,因此您不会收到有关推送的任何投诉.

  • 为我工作。不过,我必须首先将提交的状态从“已发布”更改为“草稿”。 (2认同)

zan*_*edp 10

我已经使用了histedit扩展,它允许我更改作者而不用像"转换"那样的新回购或使用"mq".

首先,在Mercurial配置文件中,确保正确设置了用户名并启用了histedit扩展:

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

[extensions]
histedit =
Run Code Online (Sandbox Code Playgroud)

然后,如果要更改版本40,请使用:

hg histedit -r 40
Run Code Online (Sandbox Code Playgroud)

在出现的文件中,在与修订版40对应的行上,将单词更改pickedit.保存并关闭文件.

现在,hg commit.您需要重新输入提交消息并保存.

最后,hg histedit --continue.

提交将与您的新提示一起显示username.副作用是提交的时间戳也会更新.