From: Jeff King <peff@peff.net>
To: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Cc: "Derrick Stolee" <stolee@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Lars Schneider" <larsxschneider@gmail.com>,
git <git@vger.kernel.org>, "Duy Nguyen" <pclouds@gmail.com>
Subject: Re: worktrees vs. alternates
Date: Wed, 16 May 2018 12:14:11 -0700 [thread overview]
Message-ID: <20180516191410.GA3417@sigill.intra.peff.net> (raw)
In-Reply-To: <0f19f9f8-d215-622e-5090-1341c013babc@linuxfoundation.org>
On Wed, May 16, 2018 at 10:58:19AM -0400, Konstantin Ryabitsev wrote:
> The parent repo is not keeping track of any other repositories that may
> be using it for alternates, which is why you basically:
>
> 1. never run auto-gc in the parent repo
> 2. repack it manually using -Ad to keep loose objects that other repos
> may be borrowing (but we don't know if they are)
> 3. never prune the parent repo, because this may delete objects other
> repos are borrowing
>
> Very infrequently you may consider this extra set of maintenance steps:
>
> 1. Find every repo mentioning the parent repository in their alternates
> 2. Repack them without the -l switch (which copies all the borrowed
> objects into those repos)
> 3. Once all child repos have been repacked this way, prune the parent
> repo (it's safe now)
> 4. Repack child repos again, this time with the -l flag, to get your
> savings back.
You can also do periodic maintenance like:
1. Copy each ref in the forked repositories into the parent repository
(e.g., giving each child that borrows from the parent its own
hierarchy in refs/remotes/<child>/*).
2. Repack the parent as normal. It will retain any objects referenced
by the children (because they are now referenced by it).
But note that:
1. It's not atomic with respect to updates in the child repos (but
then, neither is the single-repo case!).
2. It doesn't know about reflogs or the index in the child
repositories.
This is more or less how we use alternates at GitHub.
> I would heartily love a way to teach git-repack to recognize when an
> object it's borrowing from the parent repo is in danger of being pruned.
> The cheapest way of doing this would probably be to hardlink loose
> objects into its own objects directory and only consider "safe" objects
> those that are part of the parent repository's pack. This should make
> alternates a lot safer, just in case git-prune happens to run by accident.
If you set:
git config core.repositoryformatversion 1
git config extensions.preciousObjects true
in the parent, git-prune (repack -d) will refuse to run. That doesn't
solve the problem of how to repack, but it can help prevent accidental
misuse.
-Peff
next prev parent reply other threads:[~2018-05-16 19:14 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-16 8:13 worktrees vs. alternates Lars Schneider
2018-05-16 9:29 ` Ævar Arnfjörð Bjarmason
2018-05-16 9:42 ` Robert P. J. Day
2018-05-16 11:07 ` Ævar Arnfjörð Bjarmason
2018-05-16 9:51 ` Lars Schneider
2018-05-16 10:33 ` Ævar Arnfjörð Bjarmason
2018-05-16 13:02 ` Derrick Stolee
2018-05-16 14:58 ` Konstantin Ryabitsev
2018-05-16 15:34 ` Ævar Arnfjörð Bjarmason
2018-05-16 15:49 ` Konstantin Ryabitsev
2018-05-16 17:54 ` Ævar Arnfjörð Bjarmason
2018-05-16 17:14 ` Martin Fick
2018-05-16 17:41 ` Konstantin Ryabitsev
2018-05-16 18:02 ` Ævar Arnfjörð Bjarmason
2018-05-16 18:12 ` Konstantin Ryabitsev
2018-05-16 18:26 ` Martin Fick
2018-05-16 19:01 ` Konstantin Ryabitsev
2018-05-16 19:03 ` Martin Fick
2018-05-16 19:11 ` Konstantin Ryabitsev
2018-05-16 19:18 ` Martin Fick
2018-05-16 19:23 ` Jeff King
2018-05-16 19:29 ` Konstantin Ryabitsev
2018-05-16 19:37 ` Jeff King
2018-05-16 19:40 ` Martin Fick
2018-05-16 20:06 ` Jeff King
2018-05-16 20:43 ` Martin Fick
2018-05-16 20:02 ` Konstantin Ryabitsev
2018-05-16 20:17 ` Jeff King
2018-05-17 0:43 ` Sitaram Chamarty
2018-05-17 3:31 ` Jeff King
2018-05-19 5:45 ` Duy Nguyen
2018-05-16 19:14 ` Jeff King [this message]
2018-05-16 21:18 ` Stefan Beller
2018-05-16 23:45 ` Jeff King
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180516191410.GA3417@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=konstantin@linuxfoundation.org \
--cc=larsxschneider@gmail.com \
--cc=pclouds@gmail.com \
--cc=stolee@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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).