如何处理Mercurial中的提交者名称更改

Fix*_*int 11 version-control mercurial

我在Mercurial中有一个项目,有一组提交者.不幸的是,一些提交者已多次更改名称,例如,首先它是"昵称",然后它变成"名字姓氏",然后是其他东西.

大多数存储库分析工具都希望提交者在项目过程中具有相同的名称,因此理想情况下,我想在主存储库中重命名先前版本的提交者,并让每个人都进行新的克隆.可能吗?

还有其他方法可以解决这个问题吗?

Omn*_*ous 19

是的,这是可能的.使用转换扩展,然后hg convert从具有错误名称的存储库到具有良好名称的新存储库,并使用authormap.使用转换扩展和从Mercurial转换到另一个Mercurial仓库可以完成许多事情.

Authormap文件,假设Eric Hopper <bumpy@bar.com>是作者的规范名称:

Eric Hopper <bouncy@foo.com>=Eric Hopper <bumpy@bar.com>
Eric M. Hopper <bouncy@foo.com>=Eric Hopper <bumpy@bar.com>
Eric Hopper <bouncy@baz.com>=Eric Hopper <bumpy@bar.com>
Run Code Online (Sandbox Code Playgroud)

然后:

hg convert -s hg -d hg --authormap authormap badnamesrepo goodnamesrepo
Run Code Online (Sandbox Code Playgroud)

注意:在将hg转换为hg存储库时,并不总是会创建大量新的更改集,在这种情况下它将会,并且它们将等同于(但不同于)原始存储库中的更改集.这意味着使用此存储库的每个人都必须删除他们拥有的任何克隆并获取新的克隆.

在一般情况下,将hg存储库转换为hg存储库可能会创建至少一些新的更改集,或者没有理由这样做.这几乎肯定会让每个人都破坏所有克隆并重新克隆.

如果您的分析工具能够重新映射作者姓名,那么这可能是更好的方法.但这不是你要求的,所以我给你了你要求的答案.:-)

  • 一个**非常重要的警告:hg convert将*打破*所有克隆,因为哈希将改变,推/拉将不再在克隆之间工作,除非每个人都重新开始. (8认同)