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.
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.)threads / discuss / 53710
git init --separate-git-dir doesn't play nice with linked working trees
Subject: git init --separate-git-dir doesn't play nice with linked working trees
Re: git init --separate-git-dir doesn't play nice with linked working trees
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.
Re: git init --separate-git-dir doesn't play nice with linked working trees
On Thu, Jun 18, 2020 at 12:48 PM Henré Botha <henrebotha@gmail.com> wrote:
> 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).
A patch series fixing these problems has been posted[1].
[1]: https://lore.kernel.org/git/20200827082129.56149-1-sunshine@sunshineco.com/T/