Re: [RFC 2/2] Automatically transform .git/{branches,remotes} into .git/config
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:13
Johannes Schindelin [off-list ref] writes:
On Mon, 21 Nov 2005, Josef Weidendorfer wrote:quoted
On Monday 21 November 2005 14:56, Johannes Schindelin wrote:quoted
With this patch, git automatically extracts the information from .git/branches and .git/remotes, puts it into .git/config, and renames the directories to .git/branches.old and .git/remotes.old, respectively.Please... don't trash .git/branches. This is about Cogito, not about Git. You will render every repository cloned with Cogito useless, as it expects a per-branch configuration with the same name as heads.I was aware that .git/branches was introduced by Pasky, but as it is handled in git-parse-remote.sh, I thought that it may be a bit more general than just cogito.
What Josef said is correct in that I was not aware of the fact that Cogito branches/ are *per-branch* configuration when I did parse-remote. remotes/ are deliberately *per-remote* configuration, because it is more efficient when you are downloading more than one refs from the same remote over a git-aware protocol. Arguably, it is optimizing for the wrong case, because it may well be a minority case to keep track of more than one remote head. I dunno. I am not sure if it is a good idea to automatically convert what is stored in .git/branches to .git/remotes (or the equivalent of the latter in .git/config), but if somebody wanted to do it, the right thing would be: - grab the URL without optional fragment '#rembranch' part from all branches/* file; - group the ones that fetch from the same URL into one remotes/$file (what to call that file is very debatable because the original branches/* is in different namespace and we cannot tell what the user wants to call the remote), giving appropriate head mapping. branches/$branch file with the fragment part '#$rembranch' translates to "Pull: $rembranch:$branch".