机器消耗的git状态

时间:2015-02-26 01:53:17

标签: git

Vanilla git status在将其用于机器消耗时会出现一些问题,因为它更适合人类,隐藏或转换有关每个文件状态的一些细节。即使使用--porcelain-z也会出现一些问题,例如:

  • 路径相对于git存储库的根目录;有问题,因为git命令只能使用相对于当前位置的路径。使用git rev-parse --show-cdup
  • 可以轻松解决此问题
  • R状态实际上是两个文件的状态,并使用与通常XX filename不同的格式打印。有问题,因为它增加了解析的复杂性。
  • 单个文件可以有两种状态,这又增加了另一种特殊情况。当你有一个文件"替换" (需要分阶段添加和暂存删除),然后将原始文件再次放置在工作区中:

    > git status --porcelain
    R  oldFile -> newFile
    ?? oldFile
    

是否有任何git管道命令或其他方法可以更清晰地访问工作区中与舞台或头部有任何差异的文件状态?

1 个答案:

答案 0 :(得分:0)

来自git status文档。强调我的。

  

瓷器格式类似于短格式,但保证不会在Git版本之间以向后兼容的方式更改或基于用户配置。这使其成为脚本解析的理想选择。上面简短格式的描述也描述了瓷器格式,但有一些例外:

     
      
  1. 不尊重用户的color.status配置;颜色永远都会关闭。

  2.   
  3. 不尊重用户的status.relativePaths配置;显示的路径将始终相对于存储库根目录。

  4.         

    还建议使用备用-z格式进行机器解析。在该格式中,状态字段相同,但其他一些内容会发生变化。 首先,重命名条目中省略->,字段顺序颠倒(例如from -> to变为to from)。其次,遵循NUL(ASCII 0)每个文件名,将空格替换为字段分隔符和终止换行符(但空格仍然将状态字段与第一个文件名分开)。第三,包含特殊字符的文件名不是特殊格式的;没有引用或反斜杠转义。

您显然必须调整处理以正确处理单独的NUL字符,但除此之外,输出似乎更容易访问。