我正在开发一些可在TFS上运行的构建脚本。在构建过程中,我需要检查构建过程中完成的更改(其他项目所依赖的一组二进制文件)。
我真的想为脚本启用“标准错误失败”选项,但是即使我告诉它不要,我的推送仍然会写入标准错误。
我所做的是:
git push -q binaryRepo HEAD:"$Env:BUILD_SOURCEBRANCH"
但是我在构建
后的日志中得到以下内容2016-10-28T20:05:32.3179442Z ##[error]remote:
remote: Analyzing objects... (3/3) (657 ms)
remote: Storing packfile... done (40 ms)
remote: Storing index... done (42 ms)
2016-10-28T20:05:32.3209423Z Done
2016-10-28T20:05:32.4019436Z ##[error]Process completed with exit code 0 and had 1 error(s) written to the error stream.
2016-10-28T20:05:32.4029436Z ##[debug]System.Exception: Process completed with exit code 0 and had 1 error(s) written to the error stream.
当我加入-q
开关时,为什么我仍然会输出标准错误?
如果重要git version
举报2.10.0.windows.1
答案 0 :(得分:2)
任何带有remote:
前缀的内容都不是由你的 Git吐出来的,而是由其他 Git吐出来的,你正在推送的那个
没有内置的方法来关闭其他Git。你可以找出他们 1 设置了什么样的预接收和更新钩子 - 这些钩子,或者他们调用的东西,是打印Analyzing objects
等等 - 然后看看如果他们提供了一个安静的"标志,如果是这样,他们是否还为你提供了某种方式设置那个标志。 2 如果没有,你就被困住了:你必须完全丢弃stderr输出,或忽略它(相同的东西)。您可以相信,如果您的 Git打印出一些重要的失败消息,它将以非零状态退出:您可以控制的东西(必要时修改您自己的Git,或切换到另一个虽然"在遥控器上完成的事情"通常是你无法控制的东西。
1 听起来像#34;他们"实际上是你,这意味着你很幸运!只需站在另一方,服务器端,您正在执行这些脚本,并查看脚注2。
2 由于缺少暴露的侧通道,因此没有简单方便但通用的方法来设置标志。如果您使用ssh://
作为协议,则可以使用$HOME/.ssh/environment
传递额外的环境变量,前提是他们的 sshd允许此 。这有点笨拙,如果你使用https://
,显然根本不起作用。
另一种在理论上有用的方法 - 我从来没有在实践中尝试过 - 是有一个商定的,总是强制推送的虚拟分支或标签名称。这不能与update
挂钩一起使用,但是pre-receive
挂钩可以通过所有建议的更新进行扫描,如果包含特殊分支或标记,则使用其存在和/或其目标对象来提供走私数据(例如,剩余预接收分支行动的标志)。