全部舍弃并获得最新修订的干净副本?


159

我正在移动一个使用Mercurial的构建过程,并希望将工作目录恢复到最新修订的状态。在构建过程的早期运行中,将修改一些文件并添加了一些我不想提交的文件,因此我具有本地更改和未添加到存储库的文件。

丢弃所有内容并获得具有最新修订的干净工作目录的最简单方法是什么?

目前,我正在这样做:

hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH

但似乎应该有一个更简单的方法。

我想要做的等同于删除存储库,执行新的克隆以及更新。但是回购协议太大,以至于不够快。


1
“(删除内容...)”是对“ revert --all”命令的注释还是您执行的步骤?我问,因为“汞更新”将仅更新已更改的文件。如果您在更新之前删除了其他文件,则除非将其更新回null修订版(hg update 00),然后再备份至提示,否则您将不会找回这些文件。为什么hg revert --all在拉动和更新之前还不够恢复到一致的工作文件夹状态?
Lasse V. Karlsen

这是我的构建软件完成的单独步骤。(我本可以使用命令行删除,但没有使用。)
罗里(Rory

1
您可能会发现该archive命令将来很有用。例如,您可以使用hg archive ../newbuild,最后一个存储库的快照hg update将放置在此处。我通常会在每晚进行构建时这样做,以免冒险使我的存储库混乱。只需在不再需要时删除构建目录即可。
Tim Post

Answers:


212

这些步骤应该可以简化为:

hg pull
hg update -r MY_BRANCH -C

-C标志告诉update命令在更新之前放弃所有本地更改。

但是,这可能仍会将未跟踪的文件保留在存储库中。听起来您也想摆脱这些限制,所以我将使用purge扩展名:

hg pull
hg update -r MY_BRANCH -C
hg purge

无论如何,没有一个命令可以要求Mercurial执行可以在这里完成您想要的所有事情,除非您将流程更改为您无法做到的“完全克隆”方法。


6
谢谢,这是我需要的“清除”。更新-C不会摆脱未跟踪的文件,这是我一直在努力的主要内容。
罗里

4
您也可以使用TortoiseHg进行吹扫。您只需要在工作台的设置中打开扩展名即可(或编辑mercurial.ini)。
戴夫

18
如果清除扩展未激活,您也可以使用以下命令: hg --config "extensions.purge=" purge --all
Samuel Delisle15年

5
@ csharptest.net hg purge --all只是让我头疼,因为它也删除了我的本地配置,即:数据库用户/密码等:)
VMC

@SamuelDelisle谢谢你,先生,我不想为我的脚本中的这个一次性命令做任何配置更改!
joonas.fi 2016年

113
hg up -C

这将删除所有更改并更新到当前分支中的最新标题。

您还可以打开清除扩展名,以便也可以删除所有未版本控制的文件。


这包括未跟踪的文件吗?我在尝试的其他命令中遇到了一些问题。我现在尝试一下...
罗里

7
@Rory:不,hg purge用于未版本控制的文件。
zerkms 2011年

10

要删除没有清除扩展名的* nix上未跟踪的文件,可以使用

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

哪个正在使用

更新-r --rev REV修订版

update -C --clean丢弃未提交的更改(无备份)

status -u --unknown仅显示未知(未跟踪)文件

status -n --no-status隐藏状态前缀


4

如果您正在寻找一种简单的方法,那么您可能需要尝试一下。

我自己几乎不记得所有工具的命令行,因此我倾向于使用UI来做到这一点:


1.首先,选择“提交”

承诺

2.然后,显示忽略的文件。如果您有未提交的更改,请将其隐藏。

显示忽略的文件

3.现在,选择所有它们,然后单击“删除未版本化”。

删除它们

做完了 这是一个比命令行东西容易记住的过程。


我不确定(我自己使用SourceTree),但是这些屏幕截图似乎来自TortoiseHg Workbench。总的来说,我认为基于UI的解决方案是有帮助的,但是这个答案需要更好的标签。另外,“隐藏它们”对我来说还有些模糊。
乔恩·库姆斯

3

hg status将显示所有新文件,然后您可以rm它们。

通常,我想摆脱被忽略和未版本控制的文件,因此:

hg status -iu                          # to show 
hg status -iun0 | xargs -r0 rm         # to destroy

然后执行以下操作:

hg update -C -r xxxxx

这会将所有版本控制的文件置于正确的状态以进行修订xxxx


遵循告诉您您不想执行此操作的堆栈溢出的传统,我经常发现此“核选项”已破坏了我关心的内容。

正确的方法是在构建过程中使用“ make clean”选项,也可以使用“ make trueclean”和“ make distclean”选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.