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

Re: How to stop sharing objects between repositories

From
Jeff King <peff@peff.net>
Date
Aug 17, 2009, 06:48 UTC
Message-ID
<20090817064801.GA31543@coredump.intra.peff.net>
In-Reply-To
<1250475682.7155.16.camel@marge.simson.net>
On Mon, Aug 17, 2009 at 04:21:22AM +0200, Mike Galbraith wrote:
Show 7 quoted lines
> >  (1) Such a user does not necessarily know a casual "git repack -a" breaks
> >      the dependency, defeating the -s option s/he deliberately used in
> >      order to save disk space in the first place.  Perhaps we can reword
> >      this further to kill two penguins with a single stone?
> 
> Perhaps a runtime warning that you're about to break it?  This user may
> not even be the one who set the thing up, no?

I'm not really sure what such a setup would look like. If it is a big hosting site like kernel.org or repo.or.cz, then probably it wouldn't matter much. The admins there should probably be running "git repack -l -d -A" periodically to consolidate the object stores (which can happen from this sort of repacking, or from people just pushing the same commits to their repos).

That being said, I can see there being setups where such a warning might be useful. However, we don't really know if the user _wants_ that effect, or if it is an accident. So people following the recommnded "here is how you break the dependency" advice will also get the warning.

I'm torn on whether this is actually a good idea.
-- >8 --
Subject: [PATCH] repack: warn when "-l" is not used with alternates

Failing to use "-l" means that we will copy objects from the source repository, nullifying the usefulness of "-s". We don't want to make this an error, though, since "git repack -a" is used to intentionally break the dependency.

Signed-off-by: Jeff King <peff@peff.net>
---
Is "test -s" portable? It's in POSIX, but I have some lingering doubt in
the back of my mind.

A user seeing such a warning can perhaps ^C to abort the pack. However, should we also give instructions on how to undo the copying (which should be "git repack -d -l -A")?

 git-repack.sh |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/git-repack.sh b/git-repack.sh
index 1eb3bca..0bdc6e9 100755
--- a/git-repack.sh
+++ b/git-repack.sh
@@ -44,6 +44,15 @@ do
 	shift
 done
 
+if test -z "$local" && test -s "$GIT_DIR/objects/info/alternates"; then
+cat >&2 <<'EOF'
+warning: this repository uses objects from other repositories via the
+warning: "alternates" mechanism; repacking without "-l" will cause objects
+warning: to be copied into this repository, wasting disk space.
+
+EOF
+fi
+
 case "`git config --bool repack.usedeltabaseoffset || echo true`" in
 true)
 	extra="$extra --delta-base-offset" ;;
-- 
1.6.4.283.ga2765.dirty
Previous: Mike GalbraithNext: Mike Galbraith
Message 10 of 18 in “How to stop sharing objects between repositories”
  1. Jon JensenAug 16, 2009
  2. Johannes SchindelinAug 16, 2009
  3. Jeff KingAug 16, 2009
  4. Johannes SchindelinAug 16, 2009
  5. Daniel VilleneuveAug 16, 2009
  6. Johannes SchindelinAug 16, 2009
  7. Jeff KingAug 16, 2009
  8. Junio C HamanoAug 16, 2009
  9. Mike GalbraithAug 17, 2009
  10. Jeff KingAug 17, 2009
  11. Mike GalbraithAug 17, 2009
  12. Junio C HamanoAug 17, 2009
  13. Jeff KingAug 17, 2009
  14. Junio C HamanoAug 17, 2009
  15. Jeff KingAug 17, 2009
  16. Jeff KingAug 17, 2009
  17. Jeff KingAug 17, 2009
  18. Jeff KingAug 17, 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.