我应该解析git状态还是使用gitsharp?

ser*_*rgo 5 git pipeline production-environment maxscript 3dsmax

我想将git集成到生产管道中以存储3dsmax文件.虽然可以通过TortoiseGit使用git,但我想通过Maxscript与它进行通信,以便为3dsmax添加自定义菜单命令.

我应该解析git status输出文本以确定文件夹状态还是应该使用一些包装工具来正确地与git通信?

我在想,gitsharp因为很容易从Maxscript调用dotNet对象,但我没有使用外部dotNet程序.

Mar*_*air 9

从git版本1.7.0开始,就有了一个--porcelain选项git status.输出:

git status --porcelain
Run Code Online (Sandbox Code Playgroud)

...设计用于脚本 - 输出的紧凑表示,其格式在各版本之间保持一致.正如手册页所说:

瓷器格式

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

  1. 用户的color.status配置不受尊重; 颜色永远都会关闭.
  2. 不尊重用户的status.relativePaths配置; 显示的路径始终相对于存储库根目录.

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

所以,正如所说,您可能还想考虑使用:

git status -z
Run Code Online (Sandbox Code Playgroud)

...用于更强大的输出格式.


Sch*_*ern 7

git通常包含"瓷器",为日常用户交互设计的高级命令,以及"管道",它们是具有简单,稳定的界面以构建更多瓷器的低级命令.您可以在git手册页中找到一个列表.使用sergo的例子,git ls-files是管道git status.包裹管道比瓷器更容易和更安全,尽管可能需要一些令人费解的方法来弄清楚什么样的管道映射到瓷器.


bas*_*neu 2

我自己尝试解决这个问题导致解析 git status。看起来更干净且更容易实施。另一方面,我期待创建一个特制的 XML 文件,以便以更“干净”的方式获取所需的信息。