git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Jan Danielsson <jan.m.danielsson@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Keeping a non-1:1 mirror in sync and keeping private branches
Date: Sun, 16 Jul 2017 10:16:37 -0400	[thread overview]
Message-ID: <20170716141637.bsdkj4i5rncd7h5m@sigill.intra.peff.net> (raw)
In-Reply-To: <eb5e02da-662e-5561-7548-e50efba13dca@gmail.com>

On Sun, Jul 16, 2017 at 03:42:09PM +0200, Jan Danielsson wrote:

> >   1. Drop the pruning (in which case deleted branches from the sync may
> >      accumulate, but depending on the patterns that may or may not be a
> >      problem).
> 
>    I don't think that's a problem.  Or rather, I'd be willing to try it
> and see if it becomes a problem.
> 
>    That said; does "drop the pruning" mean simply removing "--prune"
> from the remove update?  I did that, but it still deletes my test-branch
> on push.  Is there an implicit pruning happening due to some
> configuration option or the specific commands I'm using?

No, that prune is fetching from your upstream into the bridge repo. So
it is dropping refs from the bridge that went away upstream. My
assumption is that your "private" branches are not in the bridge, but
just in the $DOWNSTREAMURL.

The issue is in the "git push" after that.  Your "git remote add
--mirror=push" set up config like this:

  [remote "origin"]
  url = ...
  mirror = true

and the "mirror" there implies the prune. Instead, you'd want to do:

  git config remote.origin.url $DOWNSTREAMURL
  git config remote.origin.push "+refs/*:refs/*"

Note that the "+" means a force-push. If you do have personal branches
in the downstream, their contents may be overwritten by the sync from
upstream. You can drop the "+", but then if upstream ever rewinds a
branch, your sync would fail.

> >   2. Use two different namespaces for the synced branches and the
> >      private ones (e.g., refs/mirror/* in addition to your branches in
> >      refs/heads/*). The obvious downside is that anybody cloning your
> >      downstream mirror doesn't pick up refs/mirror unless they configure
> >      that refspec explicitly.
>    This sounds very useful.  How would one go about setting up this
> configuration?

I'm not 100% clear on where your private branches are. Are they in the
bridge repo, too, or only in the eventual downstream? I'll assume
they're only in the downstream, and that the bridge is purely a tool for
syncing.

In that case, you might do:

  git clone --mirror -o upstream $UPSTREAM bridge.git
  cd bridge.git
  git config remote.downstream.url $DOWNSTREAM
  git config remote.downstream.push "+refs/*:refs/mirror/*"
  git config remote.downstream.prune true

Though I'm not 100% sure that the "prune" config is respected for
pushes. You might have to skip that last config and just issue:

  git push --prune downstream

If you're scripting it, I'd actually consider doing the whole thing
without config at all:

  # do this once
  git init bridge.git
  cd bridge.git

  # and put this in your sync script
  git fetch --prune $UPSTREAM +refs/*:refs/*
  git push --prune $DOWNSTREAM +refs/*:refs/mirror/*

-Peff

      reply	other threads:[~2017-07-16 14:22 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-16  0:59 Keeping a non-1:1 mirror in sync and keeping private branches Jan Danielsson
2017-07-16 10:10 ` Jeff King
2017-07-16 13:42   ` Jan Danielsson
2017-07-16 14:16     ` Jeff King [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170716141637.bsdkj4i5rncd7h5m@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=jan.m.danielsson@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).