仅将 git 命令的错误重定向到日志文件

问题描述 投票:0回答:2

我正在编写一个脚本,使用

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

git logging error-handling git-fetch
2个回答
3
投票

您可以使用 Unix

stderr
描述符
2
将错误捕获到文件中 :

git fetch --all && git fetch --all --tags 1>/dev/null 2>error.log

1>/dev/null
是正常的标准输出输出,而
2>error.log
将错误记录到
error.log
文件中。


0
投票
git fetch --all && git fetch --all --tags 1>/dev/null 2>error.log

您的解决方案在正常用例中运行良好。但是

git-fetch
发送也在 stderr 上创建的新分支列表。
因此,即使成功获取,上述命令也会写入
error.log

确实如此,您需要对 error.log 文件进行后处理,以提取其错误消息。

发送至“

die
”和其他辅助函数的单行消息将通过这些辅助函数添加 LF,但许多现有消息在末尾有不必要的 LF,已使用 Git 2.47(2024 年第 4 季度)、batch 进行了纠正15.

该补丁为您提供了一个可以在您的

error.log
:

上使用的命令

请参阅Jeff King (peff)

提交 1a60f20
(2024 年 9 月 5 日)。
(由 Junio C Hamano -- gitster
 --
合并于
commit b64f249,2024 年 9 月 12 日)

1a60f2066a
:从警告/错误/死亡消息中删除尾随换行符

签署人:Jeff King

我们的错误报告例程会附加一个尾随换行符,并且我们传递给它们的字符串不应包含它们(否则我们会在消息后得到一个额外的空行)。

这些案例都是通过查看结果发现的:

git grep -P '[^_](error|error_errno|warning|die|die_errno)\(.*\\n"[,)]' '*.c'
请注意,我们

do有时会在此类消息中间包含一个换行符,以创建多行输出(因此我们的 grep 在看到换行符后匹配“,”或“)”,所以我们知道我们已经到了结尾字符串)。

这些情况中的一个或多个可能会故意在末尾包含一个空行,但手动查看它们后,我认为这些都只是错误。

© www.soinside.com 2019 - 2024. All rights reserved.