From: Neal Kreitzinger <nkreitzinger@gmail.com>
To: git@vger.kernel.org
Cc: Neal Kreitzinger <neal@rsss.com>, git@vger.kernel.org
Subject: Re: rsync busy non-bare git repo 'source' to quiet
Date: Tue, 08 Mar 2011 16:20:33 -0600 [thread overview]
Message-ID: <4D76ABB1.9080001@gmail.com> (raw)
In-Reply-To: <20110308213959.GB5786@sigill.intra.peff.net>
On 3/8/2011 3:39 PM, Jeff King wrote:
> On Tue, Mar 08, 2011 at 03:25:00PM -0600, Neal Kreitzinger wrote:
>
>> Does anyone have an example of an rsync bash script that will make
>> a good copy of a non-bare git repo (including the working tree)
>> while the "source" git repo is busy and the "destination" git repo
>> is quiet?
>
> Don't copy the working tree. It's redundant with the repo data
> (assuming your working tree is clean), so you are probably faster to
> sync .git and then "reset --hard". And then you don't have to worry
> about fetching an inconsistent working tree state.
>
> For syncing the repo, I think you would need to do:
>
> 1. Copy the refs to a local temp space.
>
> 2. Copy the object db.
>
> 3. Install your temp refs into place.
>
> That way, for any updates in progress you will either not copy them
> (because the refs weren't in place in step 1, though you may have
> some of their objects), or if you do copy them, you are guaranteed to
> have all of the necessary objects (because git will not update the
> ref until all objects are in place).
>
> But I really have to wonder why you don't simply use git to do the
> fetch? It already does the right thing with respect to updates, and
> it will be way more efficient than rsync in the face of repacking (or
> if you really do want to use rsync, there is even an rsync transport
> for git already). It sounds like:
>
>> This would make it very easy for us to refresh our "beta" livebox
>> to emulate the current "gold" livebox using a single rsync instead
>> of a combination of rsync and git-clone/pull due to the pieces that
>> git does not replicate (ie, hooks) and the non-git components of
>> our git based change control menu system (which is written in bash
>> scripts on linux).
>
> You just don't want to do a pull in addition to an rsync. But I
> don't think this solution will be any less complex.
>
One reason is that we only have one development box. We would have to
open up the canonical repo and development repos to git:// protocol
access. If I use git I have to do the initial clones for creation and
then the pulls for refreshes. rsync will do the creation and refreshes
via the same script. If I use git I would have to rsync the hooks,
config, and anything else git doesn't bring over. On the goldbox I have
a bare repo that mirrors the canonical repo and then has additional
branches and is in turn mirrored by another bare mirror which has all
the additional branches. I would have to recreate the original remote
branch setup and then still maintain the remotes to the goldbox. Then I
wouldn't really have a simulation of the goldbox anymore because I have
extra remotes (maybe that wouldn't really hurt anything). Rsync seems
like a simpler solution and more accurate solution for creating a copy
of an ecosystem of interrelated git repos colocated on the same box.
A previous post in the newsgroup states:
"> If you want your rsync backup to be fine, you need to follow some
> ordering. You need to copy the refs first (.git/packed-refs and
> .git/refs/), then the loose objects (.git/objects/??/*), and then all
> the rest. If files are copied in a different order while some write
> operations are performed on the source repository then you may end up
> with an incoherent repository."
Would that work?
v/r,
neal
next prev parent reply other threads:[~2011-03-08 22:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-08 21:25 rsync busy non-bare git repo 'source' to quiet Neal Kreitzinger
2011-03-08 21:39 ` Jeff King
2011-03-08 22:20 ` Neal Kreitzinger [this message]
2011-03-08 22:38 ` Jeff King
2011-03-08 23:00 ` Neal Kreitzinger
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=4D76ABB1.9080001@gmail.com \
--to=nkreitzinger@gmail.com \
--cc=git@vger.kernel.org \
--cc=neal@rsss.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).