threads / discuss / 63944

Git synthetic worktree

Subject: Git synthetic worktree

## tl;dr

2 messages between Aug 12, 2025 and Aug 12, 2025.

replies: 1people: 2as markdown or json

Jimmy Thrasibule· Aug 12, 2025, 07:56 UTC · lore
Hi,

I'd like to create a single worktree where files from multiple Git repositories (or refs) coexist side-by-side (no subfolder separation), but each with repository still independently tracked by Git.

There may be multiple uses cases such as vendoring where a child project constructs a synthetic worktree with all its dependencies. Another use case is to generate patches with a tool such as `Quilt <https://savannah.nongnu.org/projects/quilt>` where the ``patches`` folder is an independent repository.

For example:

``` PROJECT A ├ File A ├ File B └ README ```

``` PROJECT B ├ patches │ ├ File 1 │ └ File 2 └ README ```

``` SYNTHETIC ├ patches │ ├ File 1 │ └ File 2 ├ File A ├ File B └ README ```

To put it simply, I'd like to replicate `Overlay FS <https://docs.kernel.org/filesystems/overlayfs.html>` in Git.

Now what happens when we have the same file in the repositories? We can specify which repository is at the top of the stack.

The CLI experience could look like something like this:

``` $ git clone repoA $ git remote add repoB $ git worktree push repoB/main Usual git commands now applies to `repoB`. $ git worktree top repoA. Usual git commands now applies to `repoA`. $ git worktree pop repoB/main Files from `repoB` are gone. ```

Antonio Russo· Aug 12, 2025, 13:40 UTC · re: Jimmy Thrasibule · lore

Re: Git synthetic worktree

On 2025-08-12 01:56, Jimmy Thrasibule wrote:
Show 5 quoted lines
> Hi,
> 
> I'd like to create a single worktree where files from multiple Git
> repositories (or refs) coexist side-by-side (no subfolder separation),
> but each with repository still independently tracked by Git.

I've accomplished something similar to this with a gitignore-everything policy and sparse checkout (non-cone mode, very important!).

It's janky: I use GIT_DIR and GIT_WORK_TREE to force the selection of which git repository, and I have to use 'git add -f' everywhere.

If you need something that works today, this may be a workaround. It does not allow for your "default override" based on layer priority, instead it is very file-by-file specific.

As an aside, what you are describing sounds somewhat like a use-case for ostree, which I know very little about.

Best, Antonio

← back to recent threads