【问题标题】:Mercurial: update to a revision, but not modify local filesMercurial:更新到修订版,但不修改本地文件
【发布时间】:2010-12-14 05:45:11
【问题描述】:

假设存储库有 20 个修订版。记录的当前版本是版本10,而实际的本地文件是基于最新的版本20。我不想从修订版 10 分支。我想继续修订20

目前我正在做的是将所有文件复制出修订目录,运行 hg update -C (更新修订号),删除存储库目录中的所有文件,将所有文件复制回来,然后犯罪。你可以说这很烦人而且浪费时间。有没有办法只更新修订号,而不修改任何本地文件?

提前致谢。

编辑:有很多用例(我主要使用 TortoiseHg)。

1) 在提交期间提示从存储库中删除文件时,我错误地选择了“否”。我可以使用 mq 中的条来删除修订,但这将恢复所有提交的文件。相反,我想“重新父”到以前的修订版,再次提交,然后删除不需要的修订版。这可能随时发生在任何人身上,不只是我,不只是一次。

2)我有一台开发机器A,我在上面开始项目,几个月后切换到机器B。 A 上的代码变旧,B 上的代码未提交更改。如果我想在A上继续开发,我需要通过Flash或网络等方式将代码复制到A上。现在我想在A上提交而不分支(因为A上的代码实际上是基于当前的提示)。这种情况发生的频率可能不那么频繁,但仍然不是“一次”的问题,而且在涉及一个大项目时更有可能发生。

3) 存储库有 2 个分支 C 和 D。大约有 2000 个文件。当前的提示在 C 中。我想用 C 中的同名文件覆盖 D 中的一些文件(因为 C 实现更多)同时保留其他文件不变,然后在 D 中制作新提示。我有几个选择。我可以更新到 D,将 D 的最新版本与当前提示进行比较,进行更改并提交。更新需要一些时间,比较的难度很大程度上依赖于比较工具。我也可以先比较,进行更改,备份整个目录,更新到 D,然后恢复整个目录。这更麻烦。但如果我可以“重新成为”D,我只需要做出改变并提交。这不依赖于比较工具,因为 TortoiseHg 中的提交窗口有差异列表。

如果您愿意,可能会有更多用例。我希望 Mercurial 提供这样的“重新父级”功能(据说是 hg 更新的新选项),或者至少是方便的替代方案。

【问题讨论】:

  • 你是怎么进入这个状态的?
  • 不应该浪费,因为这应该是一次性的工作。如果您需要定期执行此操作,我们需要找出原因,因为您肯定做错了其他事情。换句话说,虽然debugsetparents 可以在这里帮助你,但它是完全不正确的。这就像每次射击时都试图帮助您修复腿,而更好的方法是教您如何瞄准霰弹枪。那么,您如何以第 10 版作为父级,但以第 20 版的内容结束呢?

标签: mercurial tortoisehg


【解决方案1】:

您可能会发现这篇文章很有用。原始链接不再存在,因此它现在引用 Internet 档案的副本:

https://web.archive.org/web/20170805042314/http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks

特别是,要“重新设置”您当前的工作目录,请发出:

hg debugsetparent 20
hg debugrebuildstate

【讨论】:

    【解决方案2】:

    您可以使用hg debugsetparents 设置工作副本的父版本。

    【讨论】:

    • 虽然我同意这可能被用来解决这种情况,但在我看来,他好像经常这样做,否则就不会像他指出的那样“浪费”。鉴于此,debugsetparents 并不是最好的答案,而找出他是如何进入那个位置的。虽然我没有投票给你,但我也不会投票赞成(除非这是一次性工作,那么你会让我投票。)
    • 对一个在技术上真诚地提供正确答案的人投反对票对我来说似乎很愚蠢。
    • 感谢 debugsetparents 信息。但是,hg debugsetparents 不会更新 hg 内部状态下的文件内容记录。这将导致严重的不一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多