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

Re: Pushing to GitHub doesn't push all branches

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Jul 13, 2009, 11:01 UTC
Message-ID
<4A5B13FB.4040203@drmicha.warpmail.net>
In-Reply-To
<h3eqap$cov$1@ger.gmane.org>
Graeme Geldenhuys venit, vidit, dixit 13.07.2009 10:12:
Show 7 quoted lines
> Michael J Gruber wrote:
>> git config remote.origin.push '+refs/remotes/*:refs/heads/*'
> 
> OK, I've done this, but I'm not 100% sure what this means. This is what 
> I think (from reading various git help and users guide). Any branches I 
> have which track remote references (from svn repository) will be pushed 
> to github as various head references (normal branches).  Is this correct?

Yes, any ref you have that matches the pattern refs/remotes/* (all your remote branches) is pushed to a ref named refs/heads/* in the repo (i.e. a branch). The + means that non-fast-forward pushes are OK.

Show 5 quoted lines
> On our server, which contain the svn cloned repository and the one that 
> is only used for syncing svn -> our server -> github, I had to add a new 
> commit which represents the svn-ignore meta data to a .gitignore file. I 
> noticed I had to manually to a 'git checkout master' & 'git merge 
> remotes/trunk' to pull in new updates. I thin pushed that to github.

You didn't tell us *that* before... Exactly this is why I asked whether you want to do own work on those branches or just push a git-svn mirror.

I'm not sure adding .gitignore in a commit is a good idea, if that is the only change you will make to the original branches. It keeps you from doing a simple fetch and forces you to set up merging.

Also, svn-metadata may change over time. Do you intend to keep .gitignore up to date with those changes?

Show 35 quoted lines
> So what is my twice hourly cron script supposed to look like? Is the 
> following still ok?
> 
> ========[ script executed by cron every 30 minutes ]============
> #!/bin/sh
> GIT="/usr/local/bin/git"
> 
> # FPC repository
> cd /mnt/samba/git/fpc.git/
> $GIT checkout master
> $GIT svn fetch
> $GIT gc --auto
> $GIT push github master
> ==============================
> 
> Or do I need to add a new line after '$GIT svn fetch' that does a merge.
> 
> ==============================
> $GIT svn fetch
> $GIT merge remotes/trunk
> ...
> push to github
> ==============================
> 
> 
> Also what do I do with the other branch I want to track. It's called 
> remotes/fixes_2_2.
> 
> I believe I need to first create a local branch.
> 
>    git branch --track fixes_2_2 remotes/fixes_2_2
> 
> What do I need to modify in my cron script to keep both the master & 
> fixes_2_2 branches in sync with SubVersion and push both to GitHub. I 
> want Github to show two branches: master & fixes_2_2

Well, the way you used push you completely ignored the suggested refspec. You pushed master into a matching ref (master). master may have happened to be trunk before you added .gitignore (git-svn does not guarantee that).

So, there are two options:
- Push the git-svn converted branches as is, using the suggested refspec
(or having it in config and doing "git push github"). "git svn fetch"
will have fetched all svn refs you need.
- Set up local branches and do your merge thing. In this case you
probably also want to keep up with svn metadata changes (mind that
ignore properties may depend on the branch as well). Done right this is
nice, but of course it may be a bit more fragile.

In the first case you would need to distribute .gitignore in a different way. You could set up a separate branch (say svnhelper) for that which consists of .gitignore (and possibly other things) only. "git show svnhelper:.gitignore > .git/info/excludes" will set up each user. You can also use a tag for that (i.e. instead of a branch).

Cheers, Michael

Previous: Graeme GeldenhuysNext: Graeme Geldenhuys
Message 7 of 8 in “Pushing to GitHub doesn't push all branches”
  1. Graeme GeldenhuysJul 10, 2009
  2. Michael J GruberJul 10, 2009
  3. Michael J GruberJul 10, 2009
  4. Graeme GeldenhuysJul 10, 2009
  5. Michael J GruberJul 10, 2009
  6. Graeme GeldenhuysJul 13, 2009
  7. Michael J GruberJul 13, 2009
  8. Graeme GeldenhuysJul 13, 2009

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.