我正在编写一个脚本,使用
git fetch --all && git fetch --all --tags
来获取所有遥控器的所有分支和标签。
我想做的是,忽略/不显示获取输出,但如果获取失败,则执行某些操作(例如将错误消息写入日志文件并邮寄)。如果命令失败,如何忽略正常输出但仅将错误写入日志文件?
操作系统:CentOS 6.5
git:2.1.0-rc1
谢谢您!
即使成功获取,更新-1
git-fetch
也会写入stderr。所以如果我这样做
git fetch a.j 1>success 2>errlog
,即使成功获取,我也会在错误文件中得到这个:
来自 xx.xx.xx.xx:user.name/repo
[新分支] for/lib.base/core -> a.j/for/lib.base/core
[新分支] for/master/lib.base_core -> a.j/for/master/lib.base_core
[新分支] for/master/memmgr -> a.j/for/master/memmgr
您可以使用 Unix
stderr
描述符 2
将错误捕获到文件中 :
git fetch --all && git fetch --all --tags 1>/dev/null 2>error.log
1>/dev/null
是正常的标准输出输出,而
2>error.log
将错误记录到 error.log
文件中。
git fetch --all && git fetch --all --tags 1>/dev/null 2>error.log
您的解决方案在正常用例中运行良好。但是
发送也在 stderr 上创建的新分支列表。git-fetch
因此,即使成功获取,上述命令也会写入。error.log
确实如此,您需要对 error.log 文件进行后处理,以提取其错误消息。
发送至“
die
”和其他辅助函数的单行消息将通过这些辅助函数添加 LF,但许多现有消息在末尾有不必要的 LF,已使用 Git 2.47(2024 年第 4 季度)、batch 进行了纠正15.
该补丁为您提供了一个可以在您的
error.log
: 上使用的命令
请参阅Jeff King (peff
)
提交 1a60f20(2024 年 9 月 5 日)。
gitster
--合并于 commit b64f249,2024 年 9 月 12 日)
1a60f2066a
:从警告/错误/死亡消息中删除尾随换行符签署人:Jeff King
我们的错误报告例程会附加一个尾随换行符,并且我们传递给它们的字符串不应包含它们(否则我们会在消息后得到一个额外的空行)。这些案例都是通过查看结果发现的:
git grep -P '[^_](error|error_errno|warning|die|die_errno)\(.*\\n"[,)]' '*.c'
请注意,我们do有时会在此类消息中间包含一个换行符,以创建多行输出(因此我们的 grep 在看到换行符后匹配“,”或“)”,所以我们知道我们已经到了结尾字符串)。
这些情况中的一个或多个可能会故意在末尾包含一个空行,但手动查看它们后,我认为这些都只是错误。