如何自动删除 Mercurial 工作树中的所有 .orig 文件?
题
在合并期间,mercurial 会为任何未解析的文件留下 .orig 文件。但手动解决问题并将文件标记为正确后,它不会删除 .orig 文件。可以通过某些命令自动删除吗?
我在 Mac 上工作,所以我可以使用类似的东西:
find . -iname '*.orig' -exec rm '{}' ';'
并为其指定别名或其他名称,但我宁愿使用 hg cleanup 之类的东西......
更新:
从一段时间以来, 吹扫扩展 与 Mercurial 捆绑在一起,很好地解决了这个问题。
解决方案
就个人而言,我使用
$ rm **/*.orig
如果我厌倦了.orig
文件。运行shopt -s globstar
后,该作品在岩组和击4。
但是,如果你使用另一种外壳或想有一个内置的解决方案,那么也许你会喜欢的吹扫扩展程序(联系更新2016年8月25日)。这可以让你删除所有未跟踪文件
$ hg purge
您可以删除所有未跟踪或忽略的文件以
$ hg purge --all
使用hg purge
的一个优点是,这也将清理目录,成为删除文件后空。所述rm
命令行将刚刚离开空目录后面。
其他提示
顺便说一句。 find
工具有一个动作-delete
所以只能输入:
find <path-to-files> -name '*.orig' -delete
如果你只是想删除那些.orig的文件,而你恰好是在Windows计算机上,下面似乎运作良好:
D:\workspace>hg purge -I **/*.orig --all
这将删除在.orig这样结尾的所有未跟踪文件,但不会删除的其他的未跟踪文件,其他的答案会。
您可以通过将--print
标志以及运行前进行测试。
下面将删除那些.orig的文件在您的整个工作目录中,也适用于含有空格的路径:
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;'
应使用更新钩一>
更新:这是一个更新后运行或合并强>的工作目录已完成
我已经发布了这个答案 前. 。但这是这个答案的正确位置。
这个批处理文件是我自己制作的。
IF "%1%" == "d" (
del /s *.orig
del /s *.rej
) ELSE (
del /s /p *.rej
del /s /p *.orig
)
帮助:将此内容另存为 原始文件
- 跑步
orig d
一次删除所有拒绝和原始文件,无需确认 - 跑步
orig
确认删除文件[安全机制]
希望这有帮助。
我个人使用存储库根目录中的以下内容:
hg purge -p -I **/*.orig | xargs rm -f
它比仅使用“hg purge”或“hg purge --all”好一点,因为您可以过滤掉要包含的特定文件类型。
解释一下:
- -p 参数打印要清除的文件列表
- -I 参数白名单过滤要包含的文件
- 结果列表通过管道传输到 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`
如果你留下空目录,用于-r
的-d
和rm
标志可能有所帮助。
作为<强>奖金下,hg status --ignored
可以从编辑器(例如,VIM)用来清理这些忽略的临时文件以及交换文件。
这是我在Linux上,用于清理的命令,无需再专门做找到一个新的搜索。
这些需要被从水银项目的根目录下运行
hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f
或者,如果你想清除所有未知文件。
hg status | cut -d ' ' -f 2- | xargs rm -f
我不喜欢所选择的答案。它不会对项目的各个层次中去除一切。我用这样的:
for f in `find . | grep .orig$`; do rm "$f"; done
作品在Mac和* nix