27401
お世話になります。

Gitでは、`git-xxx` というスクリプト（実行権限付でPATH下にあるもの）があれば、 **git xxx**
という形で実行できるという特殊な仕様がありますが、この仕様の仕組みを知りたいです。

ただ単純に環境変数PATHを調べて、その`bin`ディレクトリ下にある`git-xxx`スクリプトを引っ張ってきてるだけなんでしょうか…

Gitのソースコードをダウンロードして調べてみたのですが、コードの量が膨大すぎてなかなか該当箇所のコードを見つけることができませんでした。

この仕様の仕組みをご理解されてる方がいらっしゃいましたら、ぜひ回答して頂けると幸いです。  
自分が理解できたら、Pythonで車輪の再発明をしてみたいのです。

どうかよろしくお願い致します。
CC BY-SA 3.0
2016-07-07T01:51:06.750
27400
2016-07-07T02:14:02.043
11178
question
git
Gitの拡張コマンドの仕組み
`main` 関数があるのは git.c です。

  1. `main`
  2. `run_argv`
  3. `handle_builtin` (組み込みコマンドを処理)
  4. ↑exitしなかったら(組み込みコマンドとして処理されなかったら) `execv_dashed_external` (ダッシュ付き外部コマンドをexec)
  5. `"git-xxx"` というコマンド名を組み立てて `run_command_opt_v_opt` で run-command.c の中へ
  6. run-command.c の中を巡り巡って、 `PATH` の中からコマンドを探して実行するのは `execvp(3)` ですね。
CC BY-SA 3.0
2016-07-07T02:12:36.600
27401
2016-07-07T02:12:36.600
17037
27400
answer