On May 19, Michael Sperber wrote: > Sorry if this is totally stupid. I was hoping to be able to clone > my local repo to a "release repo" where I test the release, but I > can't seem to be able to clone anything but the "master" branch: > > kramer[2] cd ~/build/plt/ > kramer[3] git branch -a > * master > remotes/origin/HEAD -> origin/master > remotes/origin/master > remotes/origin/release > remotes/origin/ryanc/sp-parser-tools > remotes/origin/samth/match-for > remotes/origin/samth/match-syntax-parse > ...
BTW -- those branches are gone on the server, run this to lose your copy of them: git remote prune origin > I was hoping "git clone" would ... clone or something in the sense > of "create a copy with everything from the original repository", but > that doesn't seem to be the case. It is -- it looks like you've missed `git checkout' command. In the above clone (probably in the others too, but it was too noisy to follow all the details), you just need to do this: git checkout release After that, `git branch' will show you that you have the `release' branch checked out with a star next to the name. > I'm also getting the impression I don't understand how git branch > names work. Help would be much appreciated ... In the above list, you asked it to show you all of the branches that you have. The most relevant there is: > * master which is the one that is checked out (has a "*"), and it is local. Remote branches are just a tool to keep track of where the remote has a certain branch -- so this: > remotes/origin/master is the name of your clone's record of where the `master' branch of the `origin' remote repository is at. Also, your `master' branch is said to be tracking the "remotes/origin/master" branch -- so if you run `git pull' etc, that's where it will take the changes from (after it updates this to match what's on the remote). If you add `-vv', it will show you where the tip is at and which branch it tracks, so you'll see these two as: * master <commit> [origin/master] <message> remotes/origin/master <commit> <message> you'll be able to see that the point to the same commit SHA1, and it also shows you that `master' tracks `origin/master'. (Git has a way to guess which branch you're talking about, so if you use `origin/master' it will guess that its `remotes/origin/master', and it will also guess that if you give it just `origin'.) > remotes/origin/release Finally, this is your copy of the release branch on the main repository. When you usually do something like git checkout release it will tell you that `release' doesn't exist -- but because your repository knows about a remote branch called `release', this will create a local `release' branch and make it track the remote one. It shows you that by saying something like: Branch release set up to track remote branch release from origin. when you do it the first time you do that checkout. Later, when you use `git checkout' to switch back and forth between the two, it won't say that since it already exists. (Most of this is described in the text I wrote.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev