On Tue, 01 Apr 2014 12:02:23 +0000, Zack Weinberg wrote: ...
That's not the issue; the issue is that I am unaware of any good way to tell git to pull or push *all* branches that exist in a particular remote. Your example
[remote "origin"] url = git@github.com:zackw/stegotorus.git fetch = +refs/heads/*:refs/remotes/origin/* pushurl = zackw@gitweb.torproject.org/stegotorus.git
would IIUC pull/push only those branches that *already exist* locally.
No, a 'git fetch --prune' will fetch all (local[1]) branches on the remote repo and store them as remotes/origin/*. You can see those branches with 'git branch -a'. The --prune makes a local remotes/origin/* branch disappear when the respective branch in the remote vanished.
In fact, I don't even know how to get it to *list* all the branches that exist in a remote, whether or not they are tracked in the local copy;
There are two kind of 'tracking'. One are the 'tracking branches, i.e. the remotes/origin/* branches that mirror ('track') the state of the remote repo. The other is the branch-specific setting for local branches that link a local branch to a specific branch on the remote.
when I've had to do this (once before, and never again until I learn a better way) I wound up manually copying and pasting from the branch list on gitweb for the remote in question.
If you actually want to push all local branches to a remote:
git push remotename 'refs/heads/*:refs/heads/*'
For that, none of those branches should be the current branch in the remote repository. Apply --force or --prune with care and understanding.
Andreas
[1] 'local branches': Those that aren't remote tracking branches, but show up in 'git branch' without '-a'.