我想将git集成到生产管道中以存储3dsmax文件。虽然可以通过TortoiseGit使用git,但我想通过Maxscript与它进行通信,为3dsmax添加自定义菜单命令。
我应该解析git status
输出文本以确定文件夹状态,还是应该使用一些包装工具来正确地与git通信?
我在考虑gitsharp
因为很容易从Maxscript调用dotNet对象,但我没有使用外部dotNet程序。
答案 0 :(得分:8)
自git 1.7.0版以来,--porcelain
有git status
个选项。输出:
git status --porcelain
...设计用于脚本 - 输出的紧凑表示,其格式在不同版本中保持一致。正如手册页所说:
瓷器格式
瓷器格式类似于短格式,但保证不会在git版本之间或基于用户配置以向后不兼容的方式更改。 这使其成为脚本解析的理想选择。上面简短格式的描述也描述了瓷器格式,但有一些例外:
- 不尊重用户的color.status配置;颜色永远都会消失。
- 不尊重用户的status.relativePaths配置;显示的路径将始终相对于存储库根目录。
醇>还建议使用备用-z格式进行机器解析。在该格式中,状态字段是相同的,但其他一些事情会发生变化。首先, - >省略 从重命名条目和字段顺序颠倒(例如从 - >到变为从)。其次,NUL(ASCII 0)跟在每个文件名后面,将空格替换为字段分隔符 和终止换行符(但是一个空格仍然将状态字段与第一个文件名分开)。第三,包含特殊字符的文件名不是特别的 格式化;没有引用或反斜杠转义。
因此,正如所说,您可能还想考虑使用:
git status -z
...以获得更强大的输出格式。
答案 1 :(得分:7)
git ls-files
是git 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程序集了。这应该是最容易开发的东西。除了解析文本....是如此脆弱。我只是忘了解析文本。