如何从Mercurial的工作目录中删除所有未跟踪的文件?


207

是否可以从我的工作目录中删除所有未跟踪的文件?假设我在工作目录中添加了一堆文件,不是通过“ hg add”添加文件,现在想完全摆脱那些新文件吗?

我在Windows上,尽管我正在使用PowerShell,所以在这里也可以使用组合解决方案。

Answers:


286

添加名为purge的Mercurial Extension 。它由Mercurial发行。

该扩展名在“ hg”中添加了“清除”命令,该命令将删除Mercurial未知的文件。即未跟踪的文件。所以你的命令是

hg purge

默认情况下未启用此功能,可能是为了避免意外删除忘记添加的文件。

要安装此扩展,请将其添加到您的Mercurial设置文件中(在Unix上为.hgrc,在Windows上为Mercurial.ini)

[extensions]
purge = 

要暂时启用此扩展,您可以使用

hg purge --config extensions.purge= 

26
hg purge --all将删除所有未跟踪和忽略的文件。这对于清理源代码构建很有用
tacaswell,2012年

22
临时启用该分机,您可以使用hg purge --config extensions.purge=
Pykler 2013年

121

没有清除的正确方法是:

hg st -un0 | xargs -0 rm

1
@simplyharsh是这样更好,还是您发现它比添加扩展名要少工作?
Yaakov Kuperman '04

3
@YaakovKuperman我猜添加扩展比此命令要少(一次启用)。我没有启用清除扩展,因为我每两周需要少于一次。也叫我傻,但是,键入此命令可以让我有足够的时间再思考一下“清除”之前的事情。
simplyharsh 2012年

2
@simplyharsh,这是有道理的,但是我有两个相同的理由要进行清除。首先,您可以进行hg purge --print,并在清除之前查看要清除的列表。其次,如果您以这种方式执行此操作,则您必须位于存储库的根目录中才能使其正常运行。
Yaakov Kuperman '04

1
@javawizard:这是一个很好的选择,使我重新考虑了hg的工作方式。但是,它仅起作用是因为rm -rf *跳过点文件和点目录,包括.hg/。同样,任何其他点文件(例如.evil-settings)也将生存并且清除效果更好。
2014年

2
请注意,“ hg st -u”和“ hg purge”发现的行为有所不同。'hg st -u'将找不到未跟踪的空目录,而'hg purge'将找到(并删除)它们。这对您可能并不重要。
迈克尔·肯特


4
rm $(hg st -u)

... -u代表“未跟踪”,您还可以选择其他状态。


4

您可以使用

hg purge --all

删除所有被忽略和未跟踪的文件

(首先,您需要按照一些答案中的说明安装清除扩展程序)



2

这应该可以解决问题:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

如果您不想使用清除:

rm $(hg st | grep ^? | awk '{print $2}')

0

假设您正在使用* nix系统,则可以运行以下命令:

rm `hg st | awk '/\?/ {print $2}'`

从汞库的根源开始。

我不知道要实现相同的标准Mercurial命令,但我相信还有更多命令行选项可以做到这一点。我确定有“更好”的解决方案,并且希望听到其他建议。

由于未经全面测试,请谨慎使用此命令。

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.