如何自动删除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
- 运行
orig d
删除所有拒绝文件和原始文件,无需确认 - 运行
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