Mercurial:重命名后使用旧名称创建新文件

4
我正在使用TortoiseHg。我有一个名为A的文件。我使用重命名工具将其更名为B。一切看起来都很好。现在,我想要创建一个名为A的新文件。当我创建一个这样的文件并尝试将其添加到仓库中时,它会显示我新文件与旧A(现在已重命名为B)之间的差异。

我该如何将A重命名为B并能够添加一个全新的A,而不是让Hg认为我正在修改以前不存在的A?

编辑:实际上,我最初所做的就是正确的方法,我只是没有正确提交重命名。(我已经提交了,但只提交了新重命名的文件,而没有提交不存在的旧文件。)

2个回答

3

在重命名后,您需要提交并创建同名的新文件。

$ hg mv A B
$ hg commit -m "moving A→B"
$ touch A
$ hg add A
$ hg commit -m "adding new A"

这就是我所做的,除了我没有通过输入那些命令来完成,而是通过从TortoiseHG上下文菜单中选择“重命名”,然后从该菜单中选择“提交”来完成。似乎这在幕后执行了一个“复制”操作。我对Hg(或VCS)的细节不是很熟悉,但我已经阅读到在重命名时保留文件历史记录存在问题。如果我按照您描述的方式操作,它是否会保留A的版本历史记录,以新名称B的形式,并允许我创建一个全新的A文件?谢谢。 - Brendan B. Barnwell
$ hg log --follow B 将显示文件重命名之前的完整历史记录。 - Vaibhav Bajpai
$ hg mv ... 被实现为复制和移除 - Vaibhav Bajpai
嗯,好的,谢谢。我不想听起来像个笨蛋,但我对事情的实现方式或获取额外信息的各种方法(例如hg log --follow B)并不感兴趣。我想知道是否有一系列操作可以通过TortoiseHg菜单界面完成,使得原本名为A的文件的历史记录保存在名为B的文件中,并且新添加到仓库中的A文件没有历史记录。这可能吗? - Brendan B. Barnwell
@Brendan B. Barnwell:确实可以,详见我的回答。 - Helgi
这会破坏提交的原子性。但从逻辑上讲,这是一个单一的操作。我们能合并提交吗或者做些其他的事情吗? - Fowl

3
假设您的代码库中有文件,要将其重命名为并添加另一个名为的文件,则可以按照以下步骤使用TortoiseHg 2.x:
  1. 右键单击。在上下文菜单中,单击TortoiseHg > 重命名文件
  2. 重命名对话框中,将输入目标文本框。单击重命名
  3. 右键单击代码库文件夹。在上下文菜单中,单击Hg提交
  4. 提交窗口中,确保选中了两个文件,即添加的和删除的。输入提交说明,然后单击提交。关闭提交窗口。
  5. 创建新文件,命名为。右键单击它。在上下文菜单中,单击TortoiseHg > 添加文件
  6. 添加窗口中,确保已选择。单击添加
  7. 右键单击代码库文件夹。在上下文菜单中,单击Hg提交
  8. 提交窗口中,确保选中了a.txt。输入提交说明,然后单击提交。关闭提交窗口。
现在您有一个不同的文件,并且有一个名为的文件,它记住曾经叫做。
P.S.这正是Vaibhav Bajpai在他的答案中发布的相同步骤。如果您处理步骤时有问题,则可能会遇到困难。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接