在合并期间,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
 )

帮助:将此内容另存为 原始文件

  1. 跑步 orig d 一次删除所有拒绝和原始文件,无需确认
  2. 跑步 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-drm标志可能有所帮助。

作为<强>奖金下,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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top