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

Re: Document clone of clone loosing branches?

From
Jeff King <peff@peff.net>
Date
Jun 14, 2008, 14:31 UTC
Message-ID
<20080614143117.GA8640@sigill.intra.peff.net>
In-Reply-To
<20080614.150548.71104932.hanzl@noel.feld.cvut.cz>
On Sat, Jun 14, 2008 at 03:05:48PM +0200, Vaclav Hanzl wrote:
Show 6 quoted lines
> I wander whether man git-clone is correct when it says "creates
> remote-tracking branches for each branch in the cloned repository".
> 
> IMHO remote-tracking branches in the original repository _are_
> branches and they are _not_ cloned (when using git-clone with no
> options) - maybe this is worth noting very explicitly?

The new repository has remote tracking branches of the _regular_ branches that are in the original repository. So the statement is correct; git-clone creates remote-tracking branches, and it makes one such branch for each branch in the cloned repository.

Unless you are complaining that it makes one for each non-remote branch in the cloned repository. But I think it is the general pattern to refer to things in refs/heads/ as simply unadorned "branch". If you want to say "all refs, including remote-tracking branches", you would typically say "refs" (which would also include tags).

> When git newby like me converts a CVS repository, containing just few
> short old branches (stable release bug fixes) and then clones it
> around, with naive belief that clone is a 1:1 copy or something close,
> nasty surprise can happen:

In that sense, clone is a bit of a misnomer, because the two _are_ different. The cloned repo has its origin pointing to the original repo, and the origin of the original repo (and its associated tracking branches) are forgotten.

>  - converted repository has those branches, OK
>  - clone of it also has them, but as a remote tracking branches
>  - clone of clone has it as dangling objects only (can go away later)

The clone of clone does not have dangling objects; either it sees a ref (because it is a branch in the clone) and it grabs the objects, or it does not see it, in which case it does not download those objects.

> Trying to play it safe, I used git-clone many times while starting
> with git, and I got really nervous when I first discovered that my old
> stable release bug fix branch is not visible in some repositories :-)

Yes, this is sometimes annoying if what you _really_ want is another clone of the clone's origin. For me, this happens because I want to clone Junio's git.git (to do some experimentation that might trash the repo), but:

  - I am too lazy to type Junio's git URL
  - I want the hard-link space-saving of cloning my local repo
So I do something like:
  ref=/path/to/my/git/repo
  git clone --reference $ref `cd $ref && git config remote.origin.url`
which you can easily put in an alias.
-Peff
Previous: Vaclav HanzlNext: Vaclav Hanzl
Message 2 of 20 in “Document clone of clone loosing branches?”
  1. Vaclav HanzlJun 14, 2008
  2. Jeff KingJun 14, 2008
  3. Vaclav HanzlJun 14, 2008
  4. Jakub NarebskiJun 14, 2008
  5. Vaclav HanzlJun 14, 2008
  6. Jakub NarebskiJun 14, 2008
  7. Lea WiemannJun 14, 2008
  8. Vaclav HanzlJun 14, 2008
  9. Junio C HamanoJun 14, 2008
  10. Vaclav HanzlJun 15, 2008
  11. Jakub NarebskiJun 14, 2008
  12. Jakub NarebskiJun 15, 2008
  13. Documentation: Note about the meaning of "clone"Robin Rosenberg, Jun 15, 2008
  14. Jakub NarebskiJun 15, 2008
  15. Wincent ColaiutaJun 15, 2008
  16. Vaclav HanzlJun 15, 2008
  17. Vaclav HanzlJun 15, 2008
  18. Miklos VajnaJun 15, 2008
  19. Junio C HamanoJun 15, 2008
  20. PATCH] cvsimport: Clarification on the use of -rRobin Rosenberg, Jun 15, 2008

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.