Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Mercurial的工作目录中删除所有未跟踪的文件?_Mercurial - Fatal编程技术网

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

如何从Mercurial的工作目录中删除所有未跟踪的文件?,mercurial,Mercurial,是否可以从我的工作目录中删除所有未跟踪的文件?比如说,我在我的工作目录中添加了一堆文件,没有通过“hgadd”添加它们,现在想完全删除这些新文件吗 虽然我使用的是PowerShell,但我使用的是windows,因此这里也可以使用组合解决方案。添加名为purge的Mercurial扩展。它是由Mercurial发行的 此扩展在“hg”中添加了一个“purge”命令,用于删除Mercurial不知道的文件。i、 e.未跟踪的文件。所以你的命令是 hg purge 默认情况下不启用它,可能是为了避

是否可以从我的工作目录中删除所有未跟踪的文件?比如说,我在我的工作目录中添加了一堆文件,没有通过“hgadd”添加它们,现在想完全删除这些新文件吗


虽然我使用的是PowerShell,但我使用的是windows,因此这里也可以使用组合解决方案。

添加名为purge的Mercurial扩展。它是由Mercurial发行的

此扩展在“hg”中添加了一个“purge”命令,用于删除Mercurial不知道的文件。i、 e.未跟踪的文件。所以你的命令是

hg purge
默认情况下不启用它,可能是为了避免意外删除忘记添加的文件

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

要临时启用此扩展,可以使用

hg purge --config extensions.purge= 

这应该可以做到:

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

假设您使用的是*nix系统,您可以运行如下操作:

rm `hg st | awk '/\?/ {print $2}'`
从mercurial存储库的根目录

我不知道有没有标准的mercurial命令可以实现同样的效果,但我相信还有更多的命令行选项可以实现这一点。我相信有“更好”的解决方案,并有兴趣听取任何其他建议


请谨慎使用此命令,因为它没有经过彻底测试。

不进行吹扫的正确方法是:

hg st -un0 | xargs -0 rm
请尝试以下操作:

hg st -un | xargs rm

…其中-u代表“untracked”,您还可以选择其他状态。

谢谢!这在Powershell中也适用于我:

hg st -un | rm

如果不想使用清除:

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

hg purge --all
删除所有被忽略和未跟踪的文件


(首先,您需要安装清除扩展,如一些答案中所述)

这可以从Windows 10命令行执行(当然要谨慎使用):


如果没有本地更改,一种快速的方法是从文件管理器(例如Windows资源管理器)中删除所需的文件夹,然后使用“hg revert”它只恢复跟踪的文件。

@simplyharsh这种方法更好,还是您只是觉得它比添加扩展名要省力?@YaakovKuperman我想添加扩展名的工作量比这个命令要小(一次启用)。我不启用清除扩展,因为我需要它少于两周一次。也可以说我很傻,但是,键入这个命令让我有足够的时间在做像“清除”这样具有建设性的事情之前再思考一次。@simplyharsh,这是有道理的,但我仍然选择清除有两个原因。首先,您可以执行hg清除--在执行清除之前,打印并查看要清除的内容的列表。第二,如果你这样做的话,你需要在回购协议的根目录中才能工作。@javawizard:这是一个让我重新思考hg如何工作的好方法。但是,它只起作用,因为
rm-rf*
跳过点文件和点目录,包括
.hg/
。出于同样的原因,任何其他点文件(比如.evil设置)也将继续存在,清除效果更好。请注意,“hg st-u”和“hg purge”发现的行为之间存在差异hg st-u'不会找到未跟踪的空目录,而hg purge'会找到(并删除)它们。这对您可能重要,也可能不重要。
hg purge--all
将删除所有未跟踪和忽略的文件。这对于在源代码构建中清理非常有用要临时启用ext,您可以使用
hg purge--config extensions.purge=
xargs在powershell中不工作-这是开箱即用的唯一答案“windows友好型”同意…第二个问题是xargs在powershell中不工作…不过,清除仍然是一个可行的选项
rm $(hg st | grep ^? | awk '{print $2}')
hg purge --all
for /f %g in ('hg status -un') do @echo %g & @del %g