Re: merging bare repository

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday, May 13, 2011 at 12:51 CEST,
     Ilya Basin <basinilya@xxxxxxxxx> wrote:

> Hi list. Please suggest me a solution. There's a remote repository;
> we're not allowed to push to. We have several committers.
> So I want to create a local mirrror. We will push our changes to it.
> Once in a while I want to sync this repo with upstream.

Okay, so you're forking an upstream git and periodically merging from
it. Pretty standard behavior.

> Here's what I do:
> 
> on server:
>     [git@server]$ git clone --bare ssh://git@xxxxxxxx/git/project.git /git/project.git
> 
> on workstation:
>     [me@client]$ git clone ssh://git@server/git/project.git
>     [me@client]$ cd project
>     [me@client]$ touch aaa
>     [me@client]$ git add aaa
>     [me@client]$ git commit aaa -m abracadabra
>     [me@client]$ git push
> 
> back on server:
>     [git@server]$ git log
>     commit e5c871122cadfa4ed4d2ab488852ecdb803b4bd8
>     Author: Ilya Basin <>
>     Date:   Fri May 13 13:39:39 2011 +0400
> 
>         abracadabra
> 
> I want to merge with upstream
>     [git@server]$ git fetch
>     [git@server]$ git merge origin
>     fatal: This operation must be run in a work tree

Don't do the merge in the server-side bare git, do it somewhere you've
made a non-bare clone that has a worktree. A workstation would be the
best choice, but you could make such a clone on the server too (but I'd
avoid introducing a process in an organization that required people to
be able to logon to the Git server). Once you've actually done the merge
you can push the merge commit to the master branch of
ssh://git@server/git/project.git.

To deal with upstreams like this I recommend you place the upstream
branch(es) in a separate namespace prefixed by <upstreamname>/, e.g.
github/master if your upstream is the master branch from the official
Github repo of the project. Example:

   git fetch ssh://git@xxxxxxxx/git/project.git
   git push ssh://git@server/git/project.git FETCH_HEAD:github/master

If you mirror the upstream branches like this on your server merges
from upstream becomes trivial[*],

   git merge origin/github/master
   git push ssh://git@server/git/project.git HEAD:master

and can be done on any workstation plus it's easy for your users to
e.g. see what they've been up to compared to the upstream:

   git log origin/github/master..origin/master

You could update github/master as often as you wish, perhaps more often
than you do the actual merge to your own branch. That way your users can
easily keep track of what goodies await them in the next merge from
upstream.

[*] I'm being unnecessarily explicit in the push operation just to
    show what's going on -- a plain "git push origin" will probably
    do the same thing.

[...]

-- 
Magnus Bäck                   Opinions are my own and do not necessarily
SW Configuration Manager      represent the ones of my employer, etc.
Sony Ericsson
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]