【问题标题】:Saving Git Push to an output file将 Git Push 保存到输出文件
【发布时间】:2017-02-05 08:00:30
【问题描述】:

我是 Git 新手。

我的问题是,使用 shell 脚本(在 Windows 中运行)我需要将 Git Push 命令保存到输出文件中。

到目前为止,我有这样的事情:

echo -e "\n6) ${GREEN}Starting Push.${NC}"
git push -v >> logs/logPush.log

if grep -q -w -i "Rejected" logs/logPush.log ; 
then 
    echo "${RED}A conflict has been detected. Exiting.${NC}" 
    read
    exit
else
    :
fi

但它总是生成一个空白文件。 Pull 工作得很好……

有谁知道如何让输出文件接收到它出现在终端上的全部信息:

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 289 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To ssh:repository
   42be914..ead1f82  master -> master
updating local tracking ref 'refs/remotes/origin/master'

【问题讨论】:

    标签: linux git bash shell


    【解决方案1】:

    也将 stderr 重定向到该文件:

    git push -v >> logs/logPush.log 2>&1
    

    看起来git push 具有用于此目的的--porcelain 选项:

    --瓷器

    产生机器可读的输出。每个 ref 的输出状态行将以制表符分隔并发送到 stdout 而不是 stderr。 将给出参考的完整符号名称。

    【讨论】:

      【解决方案2】:

      一个 UNIX shell 默认提供两个输出流——stdout 和 stderr。

      这通常很有用,因为当您将输出重定向到其他内容时,您仍然希望错误出现在屏幕上。

       $ cat nosuchfile | grep something
       cat: nosuchfile: No such file or directory
      

      这就是我想要的。我不希望 cat: nosuchfile: No such file or directory 被输入到 grep

      如您所知,您可以使用 >| 重定向标准输出。

      您可以使用2> 重定向stderr:

      $ cat nosuchfile > outfile 2>errormessage
      

      一个常见的成语是:

      $ somecommand > output 2>&1
      

      这里的&1 指的是标准输出使用的文件描述符。所以你告诉 shell 将 stderr 发送到与 stdout 相同的位置。

      您可以使用2>&1 将标准错误发送到您的输出文件。或者您可以使用您在这里学到的知识来理解 git 文档 re--porcelain,或者设计一些其他解决方案,例如在适当的情况下将 stderr 发送到第二个文件。

      【讨论】:

      • 非常感谢您提供完整的示例!
      【解决方案3】:

      我猜git push的退出状态会表明它是否成功。您应该使用它而不是解析日志:

      if ! git push -v >> logs/logPush.log 2>&1
      then 
          echo "${RED}Failed to push. Exiting.${NC}" 
          read
          exit
      fi
      

      我使用2>&1 将标准错误重定向到标准输出,因此日志将包含两个输出 - 这是可选的。

      如果命令失败,不一定表示存在冲突,因此我将错误消息修改为更通用的内容。

      【讨论】:

      • 这是正确的做法。你不应该依赖供人类阅读的信息——如果 git 被翻译成另一种语言,它会崩溃
      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多