2016-11-02 22 views
0

私は自分自身のライブラリでargc/argvのデータを解析しています。私はgitについて考えていた。 git引数はどのように機能しますか?git引数はどのように解析されますか?

例:それはハイフンを持っていないよう

Gitはここ-m "メッセージ"

をコミットし、commitはオプションではありません。このタイプのコマンドラインオプションの動作が説明されている場所はありますか?

私のライブラリはTCLAPまたはCLAPよりも悪くても、私は外部ライブラリを使用することはできません。

編集:興味深いリンク - >https://softwareengineering.stackexchange.com/questions/70357/command-line-options-style-posix-or-what

+0

'argparse'は、コマンドライン引数を解析するためのPython標準ライブラリで、このタイプの引数をサブコマンドと呼びます。 – chepner

答えて

1

Gitはあなたがユーザーの観点からそうgit statusgit add、などを行うことができますので、さまざまなコマンドを持っているように見える、git commitはコマンドgitの呼び出しのようですcommitが最初の引数です。argc/argvを実行しているときは、引数がダッシュで始まるか、その他の形式である必要があるというルールはまったくありません。

Gitの興味深い点は、それも拡張性があることです。あなたのパスのどこかに、git-helloというスクリプトを作成すると、コマンドラインでgit helloで呼び出すことができるので、 "本当の" Gitコマンドと見分けがつきません。

実際には、git-commit,git-statusという別個のプログラムがあり、正しい推測であると推測できます。 man git-commitのようなことができるので、manページを閲覧するときは注目に値する。 Gitは実際にそのようなスクリプトが置かれている実行パスを持っており、git --exec-pathを実行することで見つけ出すことができます。私のシステムでは、それは/usr/lib/git-coreであり、Gitには別々のスクリプトとシンボリックリンクがたくさんあります。

だから、Gitは実際には引数の扱いに関してほとんどのプログラムとはかなり違っています。他の標準ユーティリティがソースでコマンドライン引数をどのように扱っているかを見ることができます。例えば、GNUの実装ではthis is the source for catです。 mainに行くと、引数処理はgetopt_long関数を介して行われ、これはgetoptdescribed in GNU docsとともに、glibcの一部です。

+0

さて、gitの "スタイルのコマンドラインオプション"には名前がありますか? "-longname"というスタイルはunix/GNU:https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.htmlではなく、POSIXではなくhttp://pubs.opengroupであるためです。 org/onlinepubs/9699919799/basedefs/V1_chap12.html Xスタイルのようです:http://www.tldp.org/HOWTO/XWindow-User-HOWTO/cli.html ... gitは独自の "getopt "? – Oscar

+0

Gitスタイルに名前があるかどうかわかりません。彼らはスタイルを混ぜる。 'git add -a'はPOSIXで、' git commit --amend'はGNUスタイルです。 Gitは私が思い出す限り、 '-longoption'形式を使用しません。ここでGitの動作を確認することができます:https://github.com/git/git/blob/master/git.c。 'main'と' handle_alias'は関連しています。 – DUman

+0

私はこのスタイルをサポートしないだろうと思っています^^そしてv2ではそれを自分のフォーマットにすることができます:) – Oscar

関連する問題