On Tue, Aug 14, 2018 at 1:09 PM Christian Couder <christian.couder@xxxxxxxxx> wrote: > > Hi, > > When cloning with --mirror, the clone gets its HEAD initialized with > the value HEAD has in its origin remote. After that if HEAD changes in > origin there is no simple way to sync HEAD at the same time as the > refs are synced. > > It looks like the simplest way to sync HEAD is: > > 1) git remote show origin > 2) parse "HEAD branch: XXX" from the output of the above command > 3) git symbolic-ref HEAD refs/heads/XXX > > It looks like it would be quite easy to add an option to `fetch` to > sync HEAD at the same time as regular refs are synced because every > fetch from an origin that uses a recent Git contains something like: > > 19:55:39.304976 pkt-line.c:80 packet: git< YYYYYYYY > HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow > deepen-since deepen-not deepen-relative no-progress include-tag > multi_ack_detailed no-done symref=HEAD:refs/heads/test-1 > agent=git/2.18.0 > > which in this example shows that HEAD is a symref to refs/heads/test-1 > in origin. > > Is there a reason why no such option already exists? Would it makes > sense to add one? Is there any reason why it's not a good idea? Or am > I missing something? I think it is a great idea to add that. IIRC there was some talk when designing protocol v2 on how fetching of symrefs could be added later on in the protocol, which is why I cc'd Brandon who did the work there. > I am asking because GitLab uses HEAD in the bare repos it manages to > store the default branch against which the Merge Requests (same thing > as Pull Requests on GitHub) are created. > > So when people want to keep 2 GitLab hosted repos in sync, GitLab > needs to sync HEADs too, not just the refs. > > I think this could be useful to other setups than GitLab though. As said, I can see how that is useful; I recently came across some HEAD bug related to submodules, and there we'd also have the application. git clone --recurse-submodules file://... might clone the submodules that are in detached HEAD, which is totally not a long term viable good HEAD, so a subsequent fetch might want to change the detached HEAD in submodules or re-affix it to branches. Unrelated/extended: I think it would be cool to mirror a repository even more, e.g. it would be cool to be able to fetch (if configured as allowed) the remote reflog, (not to be confused with you local reflog of the remote). I think that work would be enabled once reftables are available, which you have an eye on?