2017-02-13 17 views
0

gitのソースコードを参照していましたが、エントリポイントファイルがどこにあるのだろうかと疑問に思っていましたか?私はそれがあると思ったが、主な機能を見つけることができなかった、いくつかのファイルを通過しました。gitのエントリポイントとは何ですか?

+1

*任意の* Cプログラムのエントリポイントは何ですか? –

+3

'grep main * .c'? – larsks

+0

@JonathonReinhart私はかなり新しくcですが、私は主な機能を持つファイルであればいいと思います。そうでない場合は教えてください。 –

答えて

2

私は間違っているかもしれませんが、私はmain()common-main.cのエントリポイントと考えています。

int main(int argc, const char **argv) 
{ 
    /* 
    * Always open file descriptors 0/1/2 to avoid clobbering files 
    * in die(). It also avoids messing up when the pipes are dup'ed 
    * onto stdin/stdout/stderr in the child processes we spawn. 
    */ 
    sanitize_stdfds(); 

    git_setup_gettext(); 

    git_extract_argv0_path(argv[0]); 

    restore_sigpipe_to_default(); 

    return cmd_main(argc, argv); 
} 

最後に、cmd_main(argc, argv)を返します。そこcmd_main()の定義の数がありますが、私は1つが、ここで返さ全体がここに投稿するビットが長いgit.cで定義された1、であるが、以下抜粋されたと信じて:

int cmd_main(int argc, const char **argv) 
{ 
    const char *cmd; 

    cmd = argv[0]; 
    if (!cmd) 
     cmd = "git-help"; 
    else { 
     const char *slash = find_last_dir_sep(cmd); 
     if (slash) 
      cmd = slash + 1; 
    } 

    /* 
    * "git-xxxx" is the same as "git xxxx", but we obviously: 
    * 
    * - cannot take flags in between the "git" and the "xxxx". 
    * - cannot execute it externally (since it would just do 
    * the same thing over again) 
    * 
    * So we just directly call the builtin handler, and die if 
    * that one cannot handle it. 
    */ 
    if (skip_prefix(cmd, "git-", &cmd)) { 
     argv[0] = cmd; 
     handle_builtin(argc, argv); 
     die("cannot handle %s as a builtin", cmd); 
    } 

handle_builtin()でもありますgit.cで定義される。

0

おそらく、誤解に対処することをお勧めします。 Gitは、プロジェクトディレクトリへの変更の収集、記録、およびアーカイブの方法です。これはのバージョン管理システムの目的であり、おそらくgitは認識しやすいものの1つです。

場合によってはビルドの自動化機能を提供することもありますが、多くの場合、最少の責任に重点を置いたツールがあります。 gitの場合、初期化されるディレクトリのさまざまな状態を保存するために、リポジトリへのコミットに集中します。プログラムをビルドしないので、エントリポイントは影響を受けません。


Cプロジェクトの場合、エントリポイントは常にコンパイラによって定義されたものと同じです。一般に、これはmainと呼ばれる機能ですが、このエントリポイントを再定義または非表示にする方法があります。たとえば、Arduinoはsetupをエントリポイントとして使用し、次にloopを呼び出します。

@larksのコメントは、わからないときにエントリポイントを見つける簡単な方法です。 Gitのリポジトリのルートディレクトリから、単純な再帰検索を使用すると、任意の含まれたファイル内の単語mainを捜すことができます。

grep main *.c 

のWindowsと同等のFINDSTRですが、bashのコマンドでWindows 10の最新の更新が大幅に互換性を改善しています。 grepは実行中のバージョンで使用できます。だからlsですが、私はそれがどこにあったのか分かりません。


いくつかのgitのプロジェクトは、同じエントリポイント名を使用して複数の言語、およびC(および前身)に関連する多くの言語が含まれます。 .cのファイル拡張子のみを見ると、最初に実行するコードの品質が十分であると仮定して、Cコンポーネントのエントリポイントを見つける良い方法です。

エクステンションが他の言語をどれくらいうまくフィルタリングするのかを妨げる方法は間違いありませんが、その使用は非常に危険なコーディング慣行を意味します。

+0

これまでのベストアンサー! – d3L

+0

これはこの質問に答えるようではありません(IMO)。私はOPが_git自体のエントリーポイントを探していると思っています_... –

+0

@ DanLoweおそらくあなたは正しいですが、答えはこの問題とより一般的な問題にも非常に関連しています。唯一の違いは、ビルドシステム、それが呼び出すディレクトリ、およびエントリポイントを混乱させるかどうかを特定することが重要であることです。ほとんどの場合、mainを見つけるだけで十分です。 – Aaron3468

関連する問題