git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH RFC v2 2/2] Move libgit.a sources into separate "lib/" directory

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Jul 1, 2026, 13:26 UTC
Message-ID
<cbbb08fc-fd4d-45ef-927b-05ac44602ff1@gmail.com>
In-Reply-To
<akS51xJSP4tkP_pS@pks.im>
Hi Patrick
On 01/07/2026 07:55, Patrick Steinhardt wrote:
Show 45 quoted lines
> On Sat, Jun 27, 2026 at 08:40:48AM +0200, SZEDER Gábor wrote:
>> On Mon, Jun 22, 2026 at 12:38:22PM +0200, Patrick Steinhardt wrote:
>>> The Git project is not exactly the easiest project to get started in:
>>> it's written in C and POSIX shell, with bits of Perl, Rust and other
>>> languages sprinkled into it. On top of that, the project has grown
>>> somewhat organically over time, making the codebase hard to navigate.
>>>
>>> These are problems that we're aware of, and there have been and still
>>> are efforts to clean up some of the technical debt that is natural to
>>> exist an a project that is more than 20 years old. Furthermore, we
>>> provide resources to newcomers that help them out like our coding
>>> guidelines, code of conduct or "MyFirstContribution.adoc".
>>>
>>> But there is a rather practical problem: finding your way around in our
>>> project's tree is not easy. Doing a directory listing in the top-level
>>> directory will present you with more than 550 files, which makes it
>>> extremely hard for a newcomer to figure out what files they are even
>>> supposed to look at. This makes the onboarding experience somewhat
>>> harder than it really needs to be. This isn't only a problem for
>>> newcomers though, as I myself struggle to find the files I am looking
>>> for because of the sheer number of files.
>>>
>>> Besides the problem of discoverability it also creates a problem of
>>> structure. It is not obvious at all which files are part of "libgit.a"
>>> and which files are only linked into our final executables. So while we
>>> have this split in our build systems, that split is not evident at all
>>> in our tree.
>>>
>>> Introduce a new "lib/" directory and move all of our sources for
>>> "libgit.a" into it to fix these issues. It makes the split we have
>>> evident and reduces the number of files in our top-level tree from 550
>>> files to ~80 files.
>>>
>>> This is still a lot of files, but it's significantly easier to navigate
>>> already. Furthermore, we can further iterate after this step and think
>>> about introducing a better structure for remaining files, as well.
>>
>> Please also discuss the drawbacks of this proposal, and try to argue
>> convincingly that the benefits outweigh the drawbacks.
> 
> This is overall a subjective change, so there is no "right" or "wrong".
> The reason why I think the pain is ultimately worth it is that it's a
> one-time cost for a permanent improvement in discoverability. And that
> improvement is especially helpful for newcomers, who already have a hard
> time navigating the code base.

As I said last time this came up, I don't really buy the discoverability argument because there are just as many files to trawl through to find what you're looking through and now there is an extra directory to check. I think the solution to that is to recommend folks use "git grep" or ctags etc. not moving code to a new directory.

I do however think putting all the library code in a subdirectory makes it easier to say things like "please try to avoid new uses of 'the_repository' and prefer 'error()' over 'die()' in library code" because all the library code is in the same directory. I think that is a much stronger selling point.

Show 9 quoted lines
>> I, for one, see myself being rather annoyed by regular 'git log
>> lib/foo.c' stopping at the rename barrier, and by the limitations of
>> '--follow'.
> 
> Right. As mentioned in a parallel subthread, I think this is a
> deficiency in Git itself which we are in the best position to fix. If it
> is proving to be painful, then it might even help to subject ourselves
> to the same pain that other projects that do larger renames experience.
> So it might motivate us to improve this area.

Another cost is remembering things have moved - the other day I spent too long wondering why "git show origin/seen:wt-status.c" wasn't working until I ran "git log origin/seen" and realized it had move to lib/wt-status.c.

Thanks
Phillip
> In any case, I'll amend these thoughts to the commit message, thanks!
> 
> Patrick
Previous: Patrick SteinhardtNext: Junio C Hamano
Message 26 of 32 in “Move libgit.a sources into separate "lib/" directory”
  1. 0/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Apr 16, 2026
  2. 1/2 t/helper: prepare "test-example-tap.c" for introduction of "lib/"Patrick Steinhardt, Apr 16, 2026
  3. 2/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Apr 16, 2026
  4. Elijah NewrenApr 17, 2026
  5. brian m. carlsonApr 17, 2026
  6. Junio C HamanoApr 17, 2026
  7. brian m. carlsonApr 17, 2026
  8. Patrick SteinhardtApr 20, 2026
  9. Phillip WoodApr 19, 2026
  10. Patrick SteinhardtApr 20, 2026
  11. Derrick StoleeApr 20, 2026
  12. Patrick SteinhardtApr 21, 2026
  13. Derrick StoleeApr 21, 2026
  14. Patrick SteinhardtApr 22, 2026
  15. 0/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Jun 22, 2026
  16. 1/2 t/helper: prepare "test-example-tap.c" for introduction of "lib/"Patrick Steinhardt, Jun 22, 2026
  17. 2/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Jun 22, 2026
  18. Junio C HamanoJun 22, 2026
  19. Patrick SteinhardtJun 24, 2026
  20. Oswald BuddenhagenJun 24, 2026
  21. Johannes SchindelinJun 26, 2026
  22. Junio C HamanoJun 26, 2026
  23. Patrick SteinhardtJul 1, 2026
  24. SZEDER GáborJun 27, 2026
  25. Patrick SteinhardtJul 1, 2026
  26. Phillip WoodJul 1, 2026
  27. Junio C HamanoJul 1, 2026
  28. Patrick SteinhardtJul 2, 2026
  29. Kaartic SivaraamJul 6, 2026
  30. 0/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Jul 13, 2026
  31. 1/2 t/helper: prepare "test-example-tap.c" for introduction of "lib/"Patrick Steinhardt, Jul 13, 2026
  32. 2/2 Move libgit.a sources into separate "lib/" directoryPatrick Steinhardt, Jul 13, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.