On 27-Jun-2021, at 22:31, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > > Atharva Raykar wrote: > >> * Reflections: >> - How does Git even start? >> (https://atharvaraykar.me/gitnotes/week6#how-does-git-even-start) >> This was just something I was curious about, not really important >> to my project. If anyone knows the answer to what I asked in that, >> section, it would be nice to know! > > They are not all linked together. > > Take for example shell.c, which will be used to generate shell.o, which > is used here: > > PROGRAM_OBJS += shell.o > > PROGRAM_OBJS is used here: > > PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS)) > > This means shell.o will be used to generate a program called git-shell. > > But the "git" program will not use PROGRAM_OBJS, therefore it will not > link shell.o. Thanks, that explained a lot of things for me, and I noticed 'git.c:cmd_main()' does indeed call these separately created executables (like git-shell). I'll try to update my blog post with this explanation when I get some free time for it.