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

Re: when is a remote a branch?

From
Petr Baudis <pasky@suse.cz>
Date
Nov 14, 2006, 20:28 UTC
Message-ID
<20061114202835.GJ7201@pasky.or.cz>
In-Reply-To
<200611121831.18851.jnareb@gmail.com>
On Sun, Nov 12, 2006 at 06:31:18PM CET, Jakub Narebski wrote:
Show 9 quoted lines
> Petr "Pasky" Baudis wrote:
> > Git and Cogito share the same models of branches. These branches are
> > 'heads' with commit pointers stored in refs/heads/, etc. 
> 
> Not exactly. "Live" branches (i.e. branches you can commit to) are head
> refs stored in refs/heads/. But in repository cloned with git-clone
> --use-separate-remotes tracking heads (tracking branches) would be at
> refs/remotes/<remotename>/. You can fetch to such a ref, but you can't
> checkout it, nor commit to it.
That was meant to be the "etc". ;-))
> > The branches/ 
> > directory says that some branches do not correspond to local development
> > (and should never be used for that) but instead they correspond to a
> Does that _should_ is enforced in Cogito? Is it enforced in Git?
Yes (you cannot switch to it). No (AFAIK).
Show 13 quoted lines
> > particular branch in some remote repository. Such branches are called
> > "REMOTE BRANCHES".
> 
> I'd rather call them "tracking branches", at least in git. So if there
> is branch 'localbranch' in refs/heads/ (?), and there is corresponding
> branches file branches/localbranch, which contains a single URL
>   git://host.domain/path/to/repository#remotebranch
> it is AFAICU equivalent to having some remotes file, named e.g. 'repo',
> with the following contents:
>   URL: git://host.domain/path/to/repository
>   Pull: remotebranch:localbranch
>   Push: remotebranch:localbranch
> or equivalent entry in git config.
Yes, except that the remote must be named 'localbranch'.
Show 11 quoted lines
> > So it's "if branch X has corresponding .git/branch/X file, it's not a
> > local branch but instead a REMOTE BRANCH corresponding to the URL stored
> > in that file". That simple. The URL is address of the repository plus
> > optionally a '#branchname' if the branch name in the remote repository
> > should not default to remote HEAD or master.
> 
> The whole concept of branches file (and marking some branches as "remote"
> branches) is IMHO from the times where there were most common to have one
> live branch per repository, and we fetched and pushed single branches.
> This simple picture changed with more widespread use of multiple heads,
> and with the introduction of tags (I think).

I completely agree. The original remotes implementation was messy, but with refs/remotes/ it's simple again. Only lack of time (or laziness) on my side is why Cogito didn't move to this yet.

Show 10 quoted lines
> By the way, with introduction of branches and remotes in config file,
> you can say:
>  [branch "localbranch"]
> 	remote = someremote
>  [remote "someremote"]
> 	fetch = remotebranch:localbranch
> 	push  = remotebranch:localbranch
> 
> and that would be equivalent to example branches file from the beginning
> of this email.

According to the documentation, this is not really useful since this just tells what should git fetch default to when on branch "localbranch". But "localbranch" is still just a branch representing a state in a remote repository, so you should never be _on_ it in a sane setup, but instead on a different branch which tracks it.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
Previous: Jakub NarebskiNext: Jakub Narebski
Message 5 of 7 in “when is a remote a branch?”
  1. Anand KumriaNov 12, 2006
  2. Jakub NarebskiNov 12, 2006
  3. Petr BaudisNov 12, 2006
  4. Jakub NarebskiNov 12, 2006
  5. Petr BaudisNov 14, 2006
  6. Jakub NarebskiNov 14, 2006
  7. Petr BaudisNov 14, 2006

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.