我正在瀏覽git源代碼,我想知道入口點文件在哪裏?我已經經歷了一些文件,我認爲它會是它,但找不到主要功能。git的入口點是什麼?
0
A
回答
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()
定義,但我相信一個返回這裏是一個在git.c
定義,這是一個有點長,張貼在這裏的全部,但下面是摘錄:
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也許是其中一個比較容易識別的版本。
有時他們也提供構建自動化,但通常最好的工具集中於最少的責任。在git的情況下,它主要關注提交到一個存儲庫,以便保存它初始化到的目錄的不同狀態。它不會構建程序,因此入口點不受影響。
對於C項目,入口點將始終與編譯器定義的入口點相同。通常這是一個名爲main
的函數,但有些方法可以重新定義或隱藏此入口點。例如,Arduino使用setup
作爲入口點,然後調用loop
。
@larks留下的評論是一種在不確定的情況下找到入口點的簡單方法。使用從git倉庫的根目錄下一個簡單的遞歸搜索可以在任何包含文件追捕字main
:
grep main *.c
在Windows相當於是FINDSTR
,但在bash命令最近更新到Windows 10有很大的提高兼容性。 grep
在我正在運行的版本中可用。所以ls
,雖然我不確定它是否一直存在。
一些git的項目包括多國語言,以及許多語言與C(及其前身)使用相同的入口點的名稱。只要在.c
的文件擴展名中查找,就可以找到C組件的入口點,假設代碼的質量足夠高,以至於您希望首先運行它。
確實有辦法干擾擴展程序如何過濾掉其他語言,但它們的使用意味着非常隨意的編碼實踐。
相關問題
- 1. Jersey API的入口點Servlet是什麼?
- 2. CXF生成的Web服務的入口點是什麼?
- 3. 當涉及逆向工程時,「入口點」和「出口點」是什麼?
- 4. .Net PE文件中的入口點RVA是什麼?
- 5. Meteor APP的入口點/文件/功能是什麼?
- 6. 消息「無法訪問的入口點」是什麼意思?
- 7. asp.net mvc 4應用程序的入口點是什麼?
- 8. swift代碼執行的入口點是什麼?
- 9. 什麼是.xlam excel插件的入口點
- 10. 什麼是WordPress的公共/直接入口點?
- 11. 在linux中GUI程序的入口點是什麼?
- 12. Asp.net核心RC2 Dockerfile的正確入口點是什麼
- 13. 什麼是git-daemon?
- 14. 爲什麼git pull會引入git fetch rebase不是的變化?
- 15. 什麼是Git中的「origin」?
- 16. 的Git:什麼是指數
- 17. Git中的gitmodules是什麼?
- 18. GIT的縮寫是什麼?
- 19. 大輸入的要點是什麼?
- 20. 什麼是添加入口行到我的package.json,爲什麼?
- 21. 什麼是端口?
- 22. 是什麼接口
- 23. 什麼是接口
- 24. 什麼是接口?
- 25. 什麼是「git de-duplicates blob」?
- 26. 什麼是git-svn-id?
- 27. git diff --patience是什麼?
- 28. Git Url是什麼意思?
- 29. Git bug還是什麼?
- 30. 什麼是「git checkout - 」。做?
* any * C程序的入口點是什麼? –
'grep main * .c'? – larsks
@JonathonReinhart雖然我對c很新,但我會認爲它可能是任何具有主函數的文件。讓我知道,如果不是這樣。 –