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

时间:2009-12-30 11:01:47

标签: git production-environment pipeline 3dsmax maxscript

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

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

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

6 个答案:

答案 0 :(得分:8)

自git 1.7.0版以来,--porcelaingit status个选项。输出:

git status --porcelain

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

  

瓷器格式

     

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

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

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

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

git status -z

...以获得更强大的输出格式。

答案 1 :(得分:7)

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

答案 2 :(得分:2)

我自己尝试解决这个问题导致解析git状态。似乎更清洁,更容易实施。另一方面,我正在寻找创建一个特殊的XML文件,以更“干净”的方式获取所需的信息。

答案 3 :(得分:2)

我发现了git ls-files,我对它的输出格式完全满意。 git status过于以人为本进行解析。

我希望Mercurial使用其明确的状态命令git,但对于大型二进制文件,似乎git对我来说效果更好。

答案 4 :(得分:0)

我对maxscript一无所知,但是如果你弄清楚如何调用.net程序集,那么你可以使用gitsharp,我认为这将是最好和最简单的选择!

查看gitsharp API的单元测试。它们展示了如何获取状态和其他高级操作,如提交,切换分支,签出,查看提交的更改等。

- 赫农

答案 5 :(得分:0)

很多max已经在使用.NET程序集了。这应该是最容易开发的东西。除了解析文本....是如此脆弱。我只是忘了解析文本。