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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 18, 2020 at 12:48 PM Henré Botha <henrebotha@xxxxxxxxx> 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).
>
> 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.

> 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.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux