在合并期间,mercurial 会为任何未解析的文件留下 .orig 文件。但是在手动解决问题并将文件标记为正确后,它不会删除 .orig 文件。它可以通过某些命令自动删除吗?
我在 Mac 上工作,所以我可以使用类似的东西:
find . -iname '*.orig' -exec rm '{}' ';'
并给它起别名或其他东西,但我宁愿使用 hg cleanup 之类的东西......
更新:
从现在开始,Purge 扩展与 Mercurial 捆绑在一起,很好地解决了这个问题。
就个人而言,我使用
$ rm **/*.orig
如果我厌倦了这些.orig文件。运行后,这在 Zsh 和 Bash 4 中有效shopt -s globstar。
但是,如果您使用另一个 shell 或想要一个内置的解决方案,那么也许您会喜欢purge 扩展(链接更新于 2016-08-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.bat
orig d以立即删除所有拒绝和原始文件而无需确认orig确认删除文件【安全机制】希望这会有所帮助。
我个人从 repo 的根目录中使用以下内容:
hg purge -p -I **/*.orig | xargs rm -f
这比只使用“hg purge”或“hg purge --all”要好一些,因为您可以过滤掉要包含的特定文件类型。
解释:
我在 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 ;
PowerShell 单行(递归):
Get-ChildItem <path> -Recurse -File -Include *.orig | Remove-Item
例如对于当前文件夹和子文件夹:
Get-ChildItem . -Recurse -File -Include *.orig | Remove-Item
这不是删除额外文件的自动方式,但它很简单,可以手动运行。
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`
如果您留下了空目录,则-rand-d标志rm可能会有所帮助。
作为奖励,hg status --ignored可以用来清理所有那些被忽略的临时文件以及从你的编辑器(例如,Vim)交换文件。
我在 Linux 上使用的一个用于清理的命令,省去了使用 find 重新搜索的需要。
这些需要从 Mercurial 项目的根目录运行
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