これは、Gitに拡張コマンドを追加したい人のためのハウツー文書です。 builtin.h と一緒に読む必要があります。

Runtime environment

Gitサブコマンドは、Git execパス(通常は /usr/lib/git-core )に存在するスタンドアローンの実行可能ファイルです。git実行可能ファイル自体は、サブコマンドがどこにあるかを認識し、コマンドライン引数を渡すことによってサブコマンドを実行する薄いラッパー(thin wrapper)です。

( "git foo" がGit execパスに見つからない場合、ラッパーはあなたの $PATH の残りの部分でそれを探します。したがって、システム空間に存在しないローカルGit拡張機能を作成することができます。)

Implementation languages

ほとんどのサブコマンドはCまたはシェルで記述されています。いくつかはPerlで書かれています。

移植性のためにポータブルC(portable C)でコーディングすることを強くお勧めしますが、これらの特定のスクリプト言語も受け入れられます。Gitスイートに必要な依存関係を広げたくないので、非常に強力な技術的理由がなければ、これ以上は受け入れることはできません。Gitスイートの隅にあるインポートユーティリティ、surgical tools、リモートヘルパー、その他のコードについてはより寛大で、Python(およびTcl/tk)を許可しますが、コア機能には使用しないでください。

これについては将来変更される可能性はありますが、特に、今のところPythonはコアで使う事は許可されていません。なぜなら、Windows環境の人々が、許容できないほど大きな機能の損失を経験しないで済むようにするには Git Windowsインストーラーでより良いPython統合が必要だからです。

Cコマンドは通常、コマンドにちなんで名付けられた単一のモジュールとして記述され、libgitと呼ばれる関数のコレクションをリンクします。したがって、コマンド「git-foo」は通常、単一の「git-foo.c」(またはメインバイナリにリンクする場合は「builtin / foo.c」)として実装されます。 この機構により、コードを読んでいる人が簡単にそのブツを見つけることができます。

Cおよびシェルでのグッドプラクティスとされるその他のガイダンスについては、 CodingGuidelines 文書を参照してください。また、Cで記述された組み込みコマンドで使用できるサポート関数については、 api-builtin.txt を参照してください。

What every extension command needs

asciidocで書かれたmanページが必要です(これは、Gitヘルプの後にサブコマンド名が続くものです)。 使用する必要のあるローカルのasciidoc configurationとマクロがあることに注意してください。 多くの場合、既存のページのクローンを作成し、テキストコンテンツを置き換えることから始めるのがと便利です。

TAP(Test Anything Protocol)でレポートするように作成されたテストが必要です。テストは、ツリーの t サブディレクトリにある実行可能ファイル(通常はシェルスクリプト)です。 各テスト名は、 t と、テストシーケンスのどこで実行されるかを制御するシーケンス番号で始まります。伝統的に、名前の語幹の残りの部分は、テストされるコマンドの語幹です。

ファイル t/README を読んで、テストの作成に使用される規則とテストサポートライブラリの詳細を確認してください。

Integrating a command

新しいサブコマンドをGitツリーにマージするときに行う必要がある作業は以下のとおりです。

  1. パッチに署名する(sign off)ことを忘れないでください!

  2. あなたのコマンド名を変数 BUILTIN_OBJS または EXTRA_PROGRAMS または SCRIPT_SH または SCRIPT_PERL または SCRIPT_PYTHON のいずれかに追加します。

  3. そのテストをtディレクトリに配置します。

  4. あなたのコマンドがp-code中間形式のインタプリタ言語で実装されている場合は、メインディレクトリの .gitignore にそのようなファイルを無視するパターンエントリが含まれていることを確認してください。 Python.pyc と .pyo ファイルはすでに網羅されています。

  5. あなたのコマンドが特定のバージョンの言語に依存している場合は、INSTALLファイルに文書化してください。

  6. コマンドをタイプ別に分類するファイル command-list.txt が配布メインディレクトリにあるため、ドキュメントの要約コマンドリスト(summary command list)の適切なサブセクションにリストできます。あなたのエントリを追加してください。どのカテゴリが適切かを理解するには、メインディレクトリの command-list.txt を確認してください。新しいコマンドが一般的なGitワークフローの一部であり、 git help で言及されるほど一般的であると思われる場合は、このコマンドを [common] 列の共通グループにマップします。

  7. 新機能を説明するためにRelNotesファイルに含める段落を1つ、メンテナに与えます。 これを行うのに適した場所は、 cover letter [PATCH 0/n] です。

以上