我使用subprocess
创建了一个python脚本,其中包括将已提交的更改推送到远程git存储库。
文件确实推送到远程仓库但由于某种原因我只得到推送后出现的git消息的最后一行。
以下是相关的代码和平:
p = subprocess.Popen('git push --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT')
result = p.communicate()[0]
print ("Result from GIT: " + result)
打印以下内容:
Result from GIT: To https://example.org/someUser/repo.git
fe4929f6..25bb62e9 HEAD -> develop
* [new tag] 1.0.1.7 -> 1.0.1.7
虽然完整的消息是我从Windows终端推送时获得的消息:
Counting objects: 25, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (23/23), done.
Writing objects: 100% (25/25), 2.18 KiB | 0 bytes/s, done.
Total 25 (delta 20), reused 0 (delta 0)
To https://example.org/someUser/repo.git
828b9e31..249be2ba HEAD -> develop
有没有办法可以获得完整的信息(以便我可以在我的脚本中打印)而不仅仅是最后一行?
谢谢
答案 0 :(得分:2)
运行git时,需要添加--progress
标志。
从git手册(运行git help push
)
- 进度
默认情况下,标准错误流在连接到终端时会报告进度状态,除非指定了-q。即使标准错误流未定向到终端,此标志也会强制进度状态。
这可以按如下方式集成到您的程序中:
p = subprocess.Popen('git push --progress --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT')
result = p.communicate()[0]
print ("Result from GIT: " + result)
请注意,使用此标志可能会使脚本输出的解析更加困难,因为git的人类可读输出可能会在未来的git版本中发生更改而不会发出警告。 (使用--porcelain
执行与您所要求相反的操作,始终生成机器可读输出