在控制台上打印的git fetch
命令的输出消息有什么特别之处?我无法使用grep
,xargs
等。也无法将输出重定向到文件。
注意:我正在使用git fetch --dry-run
命令
[sangeeth@localhost santest-code]$
[sangeeth@localhost santest-code]$ git fetch --dry-run > /tmp/1
From ssh://git.code.sf.net/p/santest/code
9f068d0..2b9dc4e master -> origin/master
[sangeeth@localhost santest-code]$
[sangeeth@localhost santest-code]$ cat /tmp/1 <= no data
[sangeeth@localhost santest-code]$
[sangeeth@localhost santest-code]$ git fetch --dry-run | grep "ssh" <= output has both lines
From ssh://git.code.sf.net/p/santest/code
9f068d0..2b9dc4e master -> origin/master
[sangeeth@localhost santest-code]$
[sangeeth@localhost santest-code]$ git --version
git version 1.7.11.4
[sangeeth@localhost santest-code]$
我正在尝试解析git fetch --dry-run
命令的输出,以检查Local(master
)分支是否使用远程(origin/master
)分支最新。
git的某些状态输出转到STDERR
。如果您想浏览它,请将STDERR合并到STDOUT中:
git fetch --dry-run 2>&1 | grep ssh
如果您想浏览它,请将STDERR合并到So:
之类的
或更简单,更安全:
使用GIT 2.41(Q2 2023),; git fetch
'(man)学习了以机器可放置格式发射的--porcelain
选项。在stdout上!
那很整洁!直接从Stdout直接从Stdout进行解析。
git fetch --porcelain
在您的情况下:
git fetch --porcelain --dry-run | grep "ssh"
请参阅提交DD781E3,CDC034A,CODC034A,58AFBE8,提交5095793,COMPS 9539638,COMPL 1C31764,COMPS 3DAF655,COMPT 2C5691D,patrick Steinhardt(CCC__11)。(由Junio C Hamano合并-gitster
-在2023年5月15日在COMPL 15BA44F中)
fetch
:介绍机器 - 可靠的"瓷器"输出格式签名:帕特里克·斯坦哈特(Patrick Steinhardt)
git-fetch
的输出显然是用户设计的,仅是用户的:我们整齐地对数据进行了列表,我们缩写参考名称,我们打印整洁的箭头,我们没有提供有关已更改的实际对象ID的信息。
这使得输出格式基本上是在git-fetch
的脚本调用中基本上无法使用的,该脚本是要了解命令执行的确切更改的上下文。引入了一个新的机器可放松的"瓷器"。应该解决此缺点的输出格式。
此输出格式旨在提供有关即将更新的每个引用,引用指向的旧对象ID以及它将更新为。
的新对象ID的信息。此外,输出格式提供了与人类可读格式相同的标志,以指示每个参考更新的基本条件,例如是快速更新,分支删除,拒绝的更新或其他条件。
输出格式非常简单:
<flag> <old-object-id> <new-object-id> <local-reference>n
我们假设两个通常是正确的条件:
- 旧对象和新对象ID已固定已知宽度,不能包含空格。
- 引用不能包含新线。
使用这些假设,输出格式变得明确解析。
此外,鉴于此输出设计为被脚本消耗,因此,机器可读数据被打印到STDOUT而不是STDERR,就像人类可读的输出一样。
这主要是为了使其他数据打印到stderr,例如错误消息或进度表,不要干扰可放松的数据。这里值得注意的是,输出格式不包括从中获取参考的遥控器,这可能是重要的信息,尤其是在多组发行的背景下。
。
但是,由于这种格式将要求我们为每次参考更新打印遥控器,这是由于可行的提取而对最可能的用户酶感到浪费,这是从单个遥控器获取时。以类似的精神,第二个限制是不能与
--recurse-submodules
一起使用。
这是因为任何参考更新都不是在不打印更新的存储库的情况下模棱两可的。考虑到多象光和子模块提取都是面向用户的功能,并将其与
--porcelain
结合使用,用于脚本目的可能不会在大多数情况下都有用。
考虑到这一点,这些限制感觉可以接受。
如果将来的用户酶中的任何一个都出现,尽管很容易添加新的"瓷器V2"。添加此信息的格式。
fetch-options
现在包括在其人页面中:
--porcelain
将输出打印为标准输出,以易于范围的格式脚本。有关详细信息,请参见
git fetch
中的部分输出。这与
--recurse-submodules=[yes|on-demand]
不兼容,并且fetch.output
配置选项的优先级。
git fetch
现在包括在其人页面中:
使用
--porcelain
时,输出格式的目的为机器可靠。与人类可读的输出格式相反因此,打印到标准输出而不是标准误差。每行都是表格:<flag> <old-object-id> <new-object-id> <local-reference>