如何自动删除Mercurial工作树中的所有.orig文件?

在合并Mercurial叶子.orig文件的任何未解决的文件。 但手动解决问题并标记文件正确后,它不会删除.orig文件。 它可以通过一些命令自动删除吗?

我在Mac上工作,所以我可以使用像这样的东西:

find . -iname '*.orig' -exec rm '{}' ';' 

和别名或什么的,但我宁愿使用像清理HG的东西…

更新:

从现在开始, Purge扩展与Mercurial捆绑在一起,很好地解决了这个问题。

我个人使用

 $ rm **/*.orig 

如果我厌倦了.orig文件。 这在Zsh和Bash 4运行后运行shopt -s globstar

但是如果你使用另一个shell或者想要一个内置的解决scheme,那么你可能会喜欢清除扩展 (链接更新2016-08-25)。 这可以让你删除所有未跟踪的文件

 $ hg purge 

您可以使用删除所有未跟踪和忽略的文件

 $ hg purge --all 

使用hg purge一个好处是,这也将清除删除文件后变空的目录。 rm命令行将仅留下空目录。

顺便说一句。 find实用程序有一个行动 – -delete所以你只能input:

find <path-to-files> -name '*.orig' -delete

如果你只是想删除.orig文件,而你碰巧在Windows电脑上,以下似乎很好:

 D:\workspace>hg purge -I **/*.orig --all 

这将删除以.orig结尾的所有未跟踪的文件,但不会删除其他未跟踪的文件,如其他答案所示。

你也可以在运行之前testing一下,通过放入--print标志。

以下内容将删除整个工作副本层次结构中的.orig文件,也适用于包含空格的path:

 find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done; 

我在.bash_profile中使用别名:

 alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \ while read -d $'\''\n'\'' file; do rm -v "$file"; done;' 

我之前已经发布了这个答案。 但这是这个答案的正确的地方。

我自己做了这个batch file。

 IF "%1%" == "d" ( del /s *.orig del /s *.rej ) ELSE ( del /s /p *.rej del /s /p *.orig ) 

帮助:将这个内容保存为orig.bat

  1. 运行orig d删除所有拒绝文件和原始文件,无需确认
  2. 运行orig删除带确认的文件[安全机制]

希望这是有帮助的。

我个人使用以下从回购的根源:

 hg purge -p -I **/*.orig | xargs rm -f 

这比使用'hg purge'或'hg purge –all'要好一些,因为你可以过滤掉你想包含的特定文件types。

对于一个解释:

  • -p参数打印要清除的文件列表
  • -I参数白名单过滤要包含的文件
  • 结果列表通过pipe道传递给xargs,并使用rm -f命令执行

我在Powershell工作,并没有在这里看到答案:

 # NOTE: be in the root of your repository # fetch all .orig files recursively $orig = (dir *.orig -recurse) ; # remove each .orig file foreach ($item in $orig) { del $($item.FullName) ; } # afterwards I make sure to remove the references to the .orig files in the repo # then commit & push hg addremove ; hg commit -m "remove .orig" ; hg push ; 

你应该使用更新钩子

更新:在工作目录更新或合并完成后运行

这不是自动删除多余文件的方式,但是手动运行足够简单。

hg st可以显示未知不被跟踪的文件。 您可以将此输出用作系统rm命令的参数。 以下是我刚刚执行的一个实际示例:

 $ # SHOW ONLY THE CRUFT $ hg status --unknown ? config/settings.rb.orig ? lib/helpers.rb.orig ? routes/main.rb.orig $ # THE CRUFT WITHOUT THE "?" PREFIX $ hg status --unknown --no-status config/settings.rb.orig lib/helpers.rb.orig routes/main.rb.orig $ # SAFELY REMOVE ALL CRUFT $ rm -- `hg st -un` 

如果你有空的目录, rm-r-d标志可能会有所帮助。

作为奖励hg status --ignored可以用来清除所有这些被忽略的临时文件以及从你的编辑器(例如Vim)交换文件。

一个我在Linux上用来清理的命令,不需要用find来做一个新的search。

这些需要从Mercurial项目的根目录运行

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

或者如果你想清除所有未知的文件。

hg status | cut -d ' ' -f 2- | xargs rm -f

我不喜欢select的答案。 它不会删除项目各个层面的所有内容。 我使用这个:

 for f in `find . | grep .orig$`; do rm "$f"; done 

适用于Mac和* nix