在合并期间,mercurial会为任何未解析的文件留下.orig文件。但在手动解决问题并将文件标记为正确后,它不会删除.orig文件。是否可以通过某些命令自动删除?
我在Mac上工作,所以我可以使用类似的东西:
find . -iname '*.orig' -exec rm '{}' ';'
和别名,但我更喜欢使用hg cleanup ......
更新:
从现在开始,Purge extension与Mercurial捆绑在一起,很好地解决了这个问题。
答案 0 :(得分:66)
就个人而言,我使用
$ rm **/*.orig
如果我厌倦了.orig
文件。运行shopt -s globstar
后,这在Zsh和Bash 4中有效。
但是如果您使用其他shell或想要内置解决方案,那么您可能会喜欢purge extension(链接已更新2016-08-25)。这允许您使用
删除所有未跟踪的文件$ hg purge
您可以使用
删除所有未跟踪和忽略的文件$ hg purge --all
使用hg purge
的一个优点是,这也将清除删除文件后变为空的目录。 rm
命令行只会留下空目录。
答案 1 :(得分:31)
顺便说一句。 find
实用程序有一个操作-delete
所以你只能输入:
find <path-to-files> -name '*.orig' -delete
答案 2 :(得分:13)
如果你只想删除.orig文件,而你碰巧在Windows计算机上,以下似乎运作良好:
D:\workspace>hg purge -I **/*.orig --all
这将删除以.orig结尾但未删除其他未跟踪文件的所有未跟踪文件,如其他答案所示。
您可以在运行它之前测试它,方法是同时放入--print
标志。
答案 3 :(得分:4)
以下内容将删除整个工作副本层次结构中的.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;'
答案 4 :(得分:1)
您应该使用update hook
更新:在工作目录的更新或合并完成后运行
答案 5 :(得分:1)
我已发布此答案before。但这是这个答案的正确位置。
我自己制作了这个批处理文件。
IF "%1%" == "d" (
del /s *.orig
del /s *.rej
) ELSE (
del /s /p *.rej
del /s /p *.orig
)
帮助: 将此内容保存为 orig.bat
orig d
,一次删除所有拒绝和原始文件,无需确认orig
以删除确认[安全机制] 希望这有用。
答案 6 :(得分:1)
我个人在回购的根目录中使用以下内容:
hg purge -p -I **/*.orig | xargs rm -f
这比使用'hg purge'或'hg purge --all'要好一些,因为你可以过滤掉你想要包含的特定文件类型。
解释:
答案 7 :(得分:1)
我在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 ;
答案 8 :(得分:1)
PowerShell一线式(递归):
Get-ChildItem <path> -Recurse -File -Include *.orig | Remove-Item
例如当前文件夹和子文件夹:
Get-ChildItem . -Recurse -File -Include *.orig | Remove-Item
答案 9 :(得分:0)
这不是删除额外文件的自动方式,但它非常简单,可以手动运行。
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
的{{1}}和-d
标记可能会有所帮助。
作为奖励,rm
可用于清除所有被忽略的临时文件以及从编辑器交换文件(例如,Vim)。
答案 10 :(得分:0)
我在Linux上用于清理的命令,无需使用find进行全新搜索。
这些需要从Mercurial项目的根目录运行
hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f
或者如果您想清除所有未知文件。
hg status | cut -d ' ' -f 2- | xargs rm -f
答案 11 :(得分:-1)
我不喜欢所选择的答案。它不会删除项目所有级别中的所有内容。我用这个:
for f in `find . | grep .orig$`; do rm "$f"; done
适用于Mac和* nix