我是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'
答案 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发送到第二个文件。