我想将 git 集成到生产管道中以暂存 3dsmax 文件。虽然可以通过 TortoiseGit 使用 git,但我想通过 Maxscript 与它进行通信,以将自定义菜单命令添加到 3dsmax。
我应该解析git status
输出文本以确定文件夹状态还是应该使用一些包装工具来正确地与 git 通信?
我正在考虑,gitsharp
因为从 Maxscript 调用 dotNet 对象很容易,但我没有使用外部 dotNet 程序。
我想将 git 集成到生产管道中以暂存 3dsmax 文件。虽然可以通过 TortoiseGit 使用 git,但我想通过 Maxscript 与它进行通信,以将自定义菜单命令添加到 3dsmax。
我应该解析git status
输出文本以确定文件夹状态还是应该使用一些包装工具来正确地与 git 通信?
我正在考虑,gitsharp
因为从 Maxscript 调用 dotNet 对象很容易,但我没有使用外部 dotNet 程序。
--porcelain
从 git 版本1.7.0开始,有了git status
. 输出:
git status --porcelain
... 专为脚本使用而设计 - 输出的紧凑表示,其格式将在各个版本之间保持一致。正如手册页所说:
瓷器格式
瓷器格式类似于短格式,但保证不会在 git 版本之间或基于用户配置以向后不兼容的方式进行更改。这使得它非常适合通过脚本进行解析。上面对短格式的描述也描述了瓷器格式,但有一些例外:
- 不尊重用户的 color.status 配置;颜色将永远关闭。
- 不尊重用户的 status.relativePaths 配置;显示的路径将始终相对于存储库根目录。
还建议使用备用 -z 格式进行机器解析。在该格式中,状态字段是相同的,但其他一些内容会发生变化。首先,从重命名条目中省略 -> 并且反转字段顺序(例如,从 -> 到变为从)。其次,NUL (ASCII 0) 跟在每个文件名之后,将空格替换为字段分隔符和终止换行符(但空格仍将状态字段与第一个文件名分开)。第三,包含特殊字符的文件名没有经过特殊格式化;不执行引用或反斜杠转义。
因此,正如所说,您可能还需要考虑使用:
git status -z
...以获得更强大的输出格式。
git 通常包含“瓷器”,为日常用户交互而设计的高级命令,以及“管道”,它们是具有简单、稳定界面的低级命令,可以构建更多瓷器。您可以在git 手册页中找到一个列表。以 sergo 为例,git ls-files
是git status
. 包裹管道比瓷器更容易,更安全,尽管可能需要一些令人费解的事情才能弄清楚哪组管道映射到什么瓷器。
我自己解决这个问题的尝试导致解析 git status。看起来更干净,更容易实现。另一方面,我正在寻找创建一个特制的 XML 文件,以便以更“干净”的方式获取所需的信息。
我发现git ls-files
并且我对它的输出格式完全满意。git status
太人性化了,无法解析。
我更喜欢Mercurial
它git
的明确状态命令,但是对于大型二进制文件,它似乎git
对我来说效果更好。
我对 maxscript 一无所知,但如果你知道如何调用 .net 程序集,那么你可以使用 gitsharp,我认为这将是最好和最简单的选择!
看看 gitsharp API 的单元测试。它们展示了如何获取状态和其他高级操作,例如提交、切换分支、签出、查看提交的更改等。
——海农
很多 max 已经在使用 .NET 程序集。这应该是最容易开发的东西。除了解析文本......是如此脆弱。我只是忘记了解析文本。