¿Cuál es el punto de input para git?

Estaba navegando por el código fuente de git, y me preguntaba dónde está el file de punto de input. He revisado un par de files, que pensé que sería pero no pude encontrar una function principal.

Podría estar equivocado, pero creo que el punto de input es main() en 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]); restre_sigpipe_to_default(); return cmd_main(argc, argv); } 

Al final puede ver que devuelve cmd_main(argc, argv) . Hay varias definiciones de cmd_main() , pero creo que la que se devuelve aquí es la que se define en git.c , que es un poco larga para publicar aquí en su totalidad, pero se extrae a continuación:

 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() también se define en git.c

Tal vez sea mejor abordar el malentendido. Git es una forma de recostackr, registrar y archivar cambios en un directory de proyecto. Este es el propósito de un Sistema de control de versiones , y git es quizás uno de los más reconocibles.

A veces también proporcionan automation de compilation, pero a menudo las mejores herramientas se centran en la menor cantidad de responsabilidades. En el caso de git, se enfoca principalmente en commits a un repository para preservar diferentes estados del directory en el que se inicializa. No construye el progtwig, por lo que los puntos de input no se ven afectados.


Para proyectos C, el punto de input siempre será el mismo definido por el comstackdor. Generalmente esta es una function llamada main , pero hay forms de networkingefinir u ocultar este punto de input. Arduino, por ejemplo, usa setup como punto de input y luego llama a loop .

El comentario dejado por @larks es una manera fácil de encontrar el punto de input cuando no estás seguro. El uso de una búsqueda recursiva simple desde el directory raíz de git repo puede search la palabra main en cualquier file incluido:

 grep main *.c 

El equivalente de Windows es FINDSTR , pero las actualizaciones recientes a Windows 10 han mejorado enormemente la compatibilidad con los commands de Bash. grep se puede usar en la versión que estoy ejecutando. También lo es, aunque no estoy seguro de si ha estado allí todo el time.


Algunos proyectos de git incluyen varios idiomas, y muchos lenguajes relacionados con C (y pnetworkingecesores) usan el mismo nombre de punto de input. Mirar solo las extensiones de file de .c es una buena manera de encontrar el punto de input de los componentes C, suponiendo que el código es de la calidad suficiente como para ejecutarlo en primer lugar.

Definitivamente hay maneras de interferir con qué tan bien la extensión filtra otros lenguajes, pero su uso implica una práctica de encoding muy aleatoria.