gitのソースコードを参照していましたが、エントリポイントファイルがどこにあるのだろうかと疑問に思っていましたか?私はそれがあると思ったが、主な機能を見つけることができなかった、いくつかのファイルを通過しました。gitのエントリポイントとは何ですか?
答えて
私は間違っているかもしれませんが、私は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
で定義される。
おそらく、誤解に対処することをお勧めします。 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コンポーネントのエントリポイントを見つける良い方法です。
エクステンションが他の言語をどれくらいうまくフィルタリングするのかを妨げる方法は間違いありませんが、その使用は非常に危険なコーディング慣行を意味します。
- 1. GUIを備えたCocoaアプリケーションのエントリポイント/コントロールフローとは何ですか?
- 2. git add -Aとgit commitのgitコマンドは何行ですか?
- 3. git pull、git fetchとgit rebaseの違いは何ですか?
- 4. Gitのブランチチップとは何ですか?
- 5. Xcode4のGitとは何ですか?
- 6. Gitのチェンジセットとは何ですか?
- 7. WindowsのGIT bashとは何ですか?
- 8. Gitの剪定とは何ですか?
- 9. gitグローバルコンフィグレーションファイルで.stCommitMsgとは何ですか?
- 10. Win32コンソールアプリケーションの正しいエントリポイントは何ですか?
- 11. git pushとgit commitのタグの違いは何ですか
- 12. Git/Git Extensionの "squash"と "fixup"の違いは何ですか?
- 13. git -Hとは何ですか?
- 14. git pullとは何ですか?
- 15. git-daemonとは何ですか?
- 16. .git/sequencerディレクトリとは何ですか?
- 17. git reflog IDとは何ですか?
- 18. 「git checkout - 」とは何ですか?行う?
- 19. 「git remote update」と「git fetch」と「git pull」の違いは何ですか?
- 20. git fetchとgit fetch originの違いは何ですか
- 21. "git add"と "git update-index"の違いは何ですか?
- 22. "git reset --hard"と "git checkout"の違いは何ですか?
- 23. "git reset"と "git rebase"の違いは何ですか?
- 24. git checkout commit-nameとgit checkout branchnameの違いは何ですか
- 25. "git whatchanged - filename"と "git rev-list-filename"の違いは何ですか?
- 26. gitとgitの違いは何ですか?
- 27. 'git format-patchと' git diff 'の違いは何ですか?
- 28. git commit -amとgit -mの違いは何ですか
- 29. git pushとgit pullの違いは何ですか?
- 30. gitで "git team-fetch"コマンドとは何ですか?
*任意の* Cプログラムのエントリポイントは何ですか? –
'grep main * .c'? – larsks
@JonathonReinhart私はかなり新しくcですが、私は主な機能を持つファイルであればいいと思います。そうでない場合は教えてください。 –