将Git Push保存到输出文件

时间:2016-09-27 15:38:54

标签: linux git bash shell

我是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'

3 个答案:

答案 0 :(得分:3)

将stderr重定向到文件:

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

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

  

- 瓷

     

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

答案 1 :(得分: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将stderr重定向到stdout,因此日志将包含两个输出 - 这是可选的。

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

答案 2 :(得分: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指的是stdout使用的文件描述符。因此,您要告诉shell将stderr发送到与stdout相同的位置。

您可以使用2>&1将stderr发送到输出文件。或者你可以使用你在这里学到的东西来理解git文档re --porcelain,或设计一些其他解决方案,例如在适当的时候将stderr发送到第二个文件。