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

Re: git init --separate-git-dir doesn't play nice with linked working trees

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jun 25, 2020, 06:16 UTC
Message-ID
<CAPig+cSaJXqx8F_OXL5uLsQ0g2Y5LQF4Q3b_gFZ+VjSqiN+zfQ@mail.gmail.com>
In-Reply-To
<CAHbriek39i9NSHRw6DZm0dftk-GkeAYR74c0xyss0vbeDHu1Hw@mail.gmail.com>
On Thu, Jun 18, 2020 at 12:48 PM Henré Botha <henrebotha@gmail.com> wrote:
Show 12 quoted lines
> I have identified two potential problems when using git init
> --separate-git-dir with a repo that has linked working trees (created
> using git worktree add).
>
> 1. Moving the gitdir of a main working tree doesn't inform linked
> working trees that their gitdir has moved. It seems to me that if I do
> cd main-worktree && git init --separate-git-dir=.git_repo, the git
> init command should go to all the linked working trees and change
> their Git links to point at main-worktree/.git_repo. But perhaps
> there's some use case I'm not aware of where you'd want to change only
> the gitdir path of the main working tree, and not those of linked
> working trees.

This is almost certainly an oversight in the implementation; the --separate-git-dir option wasn't mentioned during development of git-worktree as far as I recall.

As this relocation of the repository is entirely under Git's control (as opposed to the user mucking around as with "mv .git ../foo), it does indeed seem reasonable that --separate-git-dir should update the worktree meta-information files. As far as I know, there is no existing machinery to perform this sort of update, though, so it would have to be implemented from scratch.

Show 8 quoted lines
> 2. Attempting to move the gitdir of a linked working tree breaks the
> linked working tree entirely.
> It seems to me that if I do cd linked-worktree && git init
> --separate-git-dir=.git_repo, it should fail, or warn, or do something
> other than break the linked working tree. (I note that
> linked-worktree/{.git,.git_repo/commondir,.git_repo/gitdir} all point
> at the wrong thing after this operation; manually fixing them restores
> functionality, though it loses the link to the main working tree.)

Again, an oversight; --separate-git-dir wasn't on anyone's mind during development. This is just utterly broken, as far as I can tell; it doesn't move the repository out of the main worktree to the new location but instead seems to make a copy of it (minus the .git/worktrees directory) and drops entries from the original .git/worktrees directory, thus breaking everything. I suppose it could error out, though friendlier would be for it to behave correctly.

Previous: Henré BothaNext: Eric Sunshine
Message 2 of 3 in “git init --separate-git-dir doesn't play nice with linked working trees”
  1. Henré BothaJun 18, 2020
  2. Eric SunshineJun 25, 2020
  3. Eric SunshineAug 27, 2020

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.