将Mercurial Revision拆分为两个:(1)移动文件,(2)对移动文件进行编辑



我有一个提交,我将文件移动到另一个文件夹,然后对这些文件进行更改。

我想把这个版本分成两个部分:

  1. 只有文件移动
  2. 对这些移动文件的其余修改。

如何使用Mercurial/hg完成此操作?

我知道我可以将当前文件移动到另一个文件夹(例如folder -> backup_folder),然后从零开始,做实际的移动,然后hg commit它,最后重命名backup_folder -> folder并在上面提交一个新的修订。但是,我宁愿有一个hg命令,它可以根据从/rename到"hg log -vpr REV显示的行

假设现有的提交还没有被推送到其他地方。如果是这样,那么这将无法正常工作,因为您无法修改公开的历史记录。

假设你的历史记录是这样的:

A-B-*

其中B有移动&*为当前工作目录

假设B包含从a/b/c/file1复制到d/e/f/file2的结果。

B追溯拆分为两部分:


方法1:"Mercurial(命令行)

  1. hg up A

  2. hg revert -r B

    (此时工作目录将包含两个文件移动&文件更改)

  3. 每次移动&修改文件:

    hg cat --output=a/b/c/file1 --rev=B d/e/f/file2

    (现在每个移动的文件都有它原来的内容,但是在新的位置。)

  4. hg commit ...(创建B')

  5. hg revert -r B

    (恢复文件内容)

  6. hg commit ...(创建C)

    那么现在你的历史记录看起来像:

A-B

B'-C-*
  1. hg strip B

    (如果您也使用histedit,也可以使用hg prune)

    离开:

A-B'-C-*

在#5,你可能也可以rebase,这应该产生相同的结果,也处理原来的提交B,其他


方法2:Windows上的TortoiseHG(主要是GUI)

我使用TortoiseHG和WinMerge作为可视化diff工具。考虑到这种设置,我认为这样做会更快:

  1. 在THG中,右键单击A,选择"更新">

  2. 右键单击B,选择"还原所有文件">

  3. 打开每个移动&在visual Diff (^D)中修改文件

    • 在diff工具中恢复所有更改,保存文件
  4. Commit…

  5. 右键单击B,选择"还原所有文件">

  6. Commit…

  7. 右键单击B,修改历史记录,条带

假设THG与其他diff工具,或不在Windows上,将类似地工作。


关于使用日志的问题…如果您像这样查看日志:

hg log --git -vpr  revision#

它将包含以下行:

copy from a/b/c/file1
copy to d/e/f/file2

我知道没有简单/直接的方法让hg读取这些行并使用它们来重新应用命令。虽然这将枚举所有复制的文件,但使用任何其他方法查看commitB也可以做到这一点。所以我不认为使用日志能让你走得太远,不幸的是。

相关内容

  • 没有找到相关文章

最新更新