From: Ben Knoble Date: Mon, 29 Sep 2025 21:17:27 GMT Subject: Re: [Feature Request] Support for sharing root-level files across repositories Message-ID: <8C362D63-3EF1-4042-A825-7DAFA9A51B22@gmail.com> In-Reply-To: <03d601dc3166$0f302170$2d906450$@nexbridge.com> > Le 29 sept. 2025 à 13:25, rsbecker@nexbridge.com a écrit : > > On September 26, 2025 4:33 AM, George Ogden wrote: >> Hello Git developers, >> >> Firstly, apologies if this has already been discussed or if there is a way to solve this >> problem that I am not aware of. >> >> Motivation >> >> Git submodules are very useful for sharing directories between repositories. >> However, in some workflows, there is a need to share a single file that must live in >> the repository root. >> >> A concrete example is .pre-commit-config.yaml. I maintain a standard template >> across many repositories. When I add a new hook or update a version, I have to >> manually update the file in each repository. I could use a submodule for this, but >> submodules always appear in a subdirectory — not at the root where tools expect >> this file. >> >> The same issue arises with other configuration files that need to reside at the top >> level of a project (linters, CI configs, licenses, etc.). >> >> Proposal >> >> It would be helpful if Git provided a way to share a file across repositories so that it >> appears at the root of the working tree, without requiring a separate build step, >> symlink, or copy operation. >> >> I understand there are alternative approaches (subtrees, packages, external >> tooling), but they all involve extra indirection. Having first-class support within Git >> for this use case would make it much simpler and more consistent. >> >> Thanks >> >> Thank you for your work maintaining and evolving Git! I would greatly appreciate >> any feedback on whether this idea has been considered before, and if there are >> technical reasons it may not fit Git’s model. > > I have been thinking about a current use case for this RFE. Consider > GNU/Configure-based projects where we have config.guess and config.sub in the > repository root. These two files are independent of the project itself and truly > should be shared and managed from a single authoritative source. It can be a > real delay/pain to wait for the project to manually update these two files > from an upstream to get platform support for their project. > > In order to support something like this, we might need a submodule concept > That supports something like a link upwards. Or this might be something > That could be part of the sparse-checkout infrastructure. I'm not sure, but I > Do think there is merit to this. It could also apply to organisations that have > cross-application root certificates that need to be in the same directory > as the application root. Sparse-checkout made me think of some kind of “repository overlay”: as long as there are no conflicts (or perhaps for later versions, conflicts are resolved by higher-layers-win), each layer (i.e., repository) knows only about its own files. Adding untracked files would need some work to choose a layer.