问题 Mercurial:恢复.orig文件的简单方法?


我刚走了,不小心跑了 hg revert *。 Mercurial是否提供了移动所有工具的工具 .orig 文件回到原位?


10869
2017-12-16 19:24


起源



答案:


不,如果您正在使用bash,您可以随时执行:

for thefile in *.orig ; do cp -v $thefile ${thefile%%.orig} ; done

11
2017-12-16 19:30



在启用了命令扩展的Windows命令提示符下,您可以执行此操作 for /f %i in ('dir /s /b *.orig') do @copy %i %~dpni - leoger
@leoger:哇...这对我来说基本上看起来像线路噪音。我猜这是非程序员在看到shell时的感受...... - David Wolever
@david:它看起来像线路噪音!我必须做 help for 查找变量切片运算符:) d代表驱动器,p代表路径,n代表名称(而不是名称加文件扩展名) - leoger
这是一个可以完成整棵树的工作(即递归到你的文件夹中) find . -name "*.orig" | while read f; do cp -v $f ${f%%.orig}; done - s29
这仅在.orig文件位于您运行命令的目录中时才有效。我的答案应该适用于repo中的所有* .orig文件,无论您在何处运行它。 - Brendan Maguire


答案:


不,如果您正在使用bash,您可以随时执行:

for thefile in *.orig ; do cp -v $thefile ${thefile%%.orig} ; done

11
2017-12-16 19:30



在启用了命令扩展的Windows命令提示符下,您可以执行此操作 for /f %i in ('dir /s /b *.orig') do @copy %i %~dpni - leoger
@leoger:哇...这对我来说基本上看起来像线路噪音。我猜这是非程序员在看到shell时的感受...... - David Wolever
@david:它看起来像线路噪音!我必须做 help for 查找变量切片运算符:) d代表驱动器,p代表路径,n代表名称(而不是名称加文件扩展名) - leoger
这是一个可以完成整棵树的工作(即递归到你的文件夹中) find . -name "*.orig" | while read f; do cp -v $f ${f%%.orig}; done - s29
这仅在.orig文件位于您运行命令的目录中时才有效。我的答案应该适用于repo中的所有* .orig文件,无论您在何处运行它。 - Brendan Maguire


此命令将从您的仓库中的任何位置恢复您的.orig文件:

find `hg root` -name *.orig -exec rename -f 's/.orig//' {} \;

您可以在.hgrc中为此添加hg别名,如下所示:

[alias]
reinstate= !find `$HG root` -name *.orig -exec rename -f 's/.orig//' {} \;

然后使用以下命令从您的repo运行它:

hg reinstate

3
2017-09-19 12:56



你也可以添加 -v 到rename命令以查看重命名的文件 - Tobias Helbich
仅供参考,我需要包装 *.orig 在引号中,以防止shell试图扩展该星。 - Maxy-B


不,但您的操作系统可能提供 cp 命令(或等效的)。只需将.orig复制到还原文件,或者,如果您已提交所需版本的文件,请从该版本再次还原它。


0
2017-12-16 19:31



是的,我只是试图避免为15个文件做到这一点...... - David Wolever