threads / discuss / 62722

How to relocate common and workdir?

Subject: How to relocate common and workdir?

## tl;dr

2 messages between Jan 2, 2025 and Jan 6, 2025.

replies: 1people: 2as markdown or json

Jörg Sommer· Jan 2, 2025, 09:30 UTC · lore
Hello,

the KAS project currently discusses a patch [1] to relocate the common dir and adjust the .git file in the worktree to match the new location. Is there something else to adjust than just the .git file?

[1] https://groups.google.com/g/kas-devel/c/OM7bm-tjyLM

The background is that the git repository gets mounted inside a Docker container at a fixed position /repo. This works fine for pure git repositories, but with shared worktrees this fails, because the location in the file /repo/.git is not inside the container.

Now, the idea is to mount $(git rev-parse --common-dir) at /repo-common inside the container, and overlay /repo/.git (via bind-mount) with a new file that refers to /repo-common: `sed "s|gitdir: ${git_com_dir}/|gitdir: /repo-common/|" "${KAS_REPO_DIR}/.git"`.

I saw that there are also the files *commondir* and *gitdir* in *.git/worktrees/…*. I suspect there are circumstances these files need adjustments, too.

Is it really that easy and safe to modify the .git file and point to a new location of the common-dir, or has to be done more?

Thanks for your help.
Kind regards, Jörg
-- 
Mit Statistik kann man alles zeigen – sogar das Gegenteil.
Eric Sunshine· Jan 6, 2025, 04:17 UTC · re: Jörg Sommer · lore

Re: How to relocate common and workdir?

On Thu, Jan 2, 2025 at 4:46 AM Jörg Sommer <joerg@jo-so.de> wrote:
Show 6 quoted lines
> I saw that there are also the files *commondir* and *gitdir* in
> *.git/worktrees/…*. I suspect there are circumstances these files need
> adjustments, too.
>
> Is it really that easy and safe to modify the .git file and point to a new
> location of the common-dir, or has to be done more?

As long as "${repo}/worktrees/${wtid}/gitdir" and "${worktreepath}/.git" are agreement with one another -- that is, pointing at one another -- everything should be fine. That's all that's needed for healthy linkage between the repository and the worktree. You usually don't have to touch "${repo}/worktrees/${wtid}/commondir" -- unless you have some really funky layout -- since that normally just points up at "${repo}".

By the way, you may be interested in the new "--relative-paths" paths option of git-worktree and the related configuration "worktree.useRelativePaths" and "extension.relativeWorktrees" which will be part of Git 2.48.0 release, and which was (at least in part) motivated by the sort of use-case you describe.

← back to recent threads