如何解析git参数?

时间:2016-11-02 21:10:38

标签: git command command-line-interface

我正在使用自己的库来解析argc / argv数据。我在考虑git。 git参数如何工作?

示例:

  

git commit -m“message”

这里,commit不是一个选项,因为它没有连字符。是否有任何解释此类命令行选项行为的地方?

我知道我的库会比TCLAP或CLAP更糟糕但我不允许使用外部库。

编辑:有趣的链接 - > https://softwareengineering.stackexchange.com/questions/70357/command-line-options-style-posix-or-what

1 个答案:

答案 0 :(得分:1)

Git似乎有不同的命令,因此您可以执行git statusgit add等。因此,从用户的角度来看,git commit似乎是对命令的调用{ {1}} git是第一个参数 - 当你正在进行commit时,绝对没有规则说你的参数必须以破折号或其他格式开头。

关于Git的有趣之处在于它也是可扩展的。如果您在路径中的某个位置创建了一个名为argc/argv的脚本(注意单个单词,带有破折号),那么您可以在命令行上通过git-hello调用它,使其与“真实”无法区分Git命令。

您可能会从上面猜到,实际上有一个名为git hellogit-commit的单独程序,等等,这是一个正确的猜测。浏览git-status页面时值得注意,因为您可以执行man之类的操作。事实上,Git确实有一个执行路径,其中包含这些脚本,您可以通过运行man git-commit找到它。在我的系统上,那是git --exec-path并且有一堆独立的脚本和符号链接返回给Git。

因此,就参数处理而言,Git实际上与大多数程序完全不同。您可以看到其他标准实用程序如何在其源中处理其命令行参数。例如,在其GNU实现中this is the source for cat。如果你去/usr/lib/git-core,你会注意到参数处理是通过main函数,它与getopt_long described in GNU docs一起,是{{1}的一部分}}