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

[PATCH 4/4] Teach "git clone" to pack refs

From
Johan Herland <johan@herland.net>
Date
Apr 14, 2008, 08:04 UTC
Message-ID
<200804141004.16828.johan@herland.net>
In-Reply-To
<200804141000.09515.johan@herland.net>

In repos with many refs, it is unlikely that most refs will ever change. This fact is already exploited by "git gc" by executing "git pack-refs" to consolidate all refs into a single file.

When cloning a repo with many refs, it does not make sense to create the loose refs in the first place, just to have the next "git gc" consolidate them into one file. Instead, make "git clone" create the packed refs file immediately, and forego the loose refs completely.

Signed-off-by: Johan Herland <johan@herland.net>
---
 builtin-clone.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/builtin-clone.c b/builtin-clone.c
index 0a9c873..01c595e 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -18,6 +18,7 @@
 #include "transport.h"
 #include "strbuf.h"
 #include "dir.h"
+#include "pack-refs.h"
 
 /*
  * Overall FIXMEs:
@@ -313,8 +314,11 @@ static struct ref *write_remote_refs(const struct ref *refs, struct refspec *ref
 	get_fetch_map(refs, tag_refspec, &tail, 0);
 
 	for (r = local_refs; r; r = r->next)
-		update_ref(reflog,
-			   r->peer_ref->name, r->old_sha1, NULL, 0, DIE_ON_ERR);
+		add_extra_ref(r->peer_ref->name, r->old_sha1, 0);
+
+	pack_refs(PACK_REFS_ALL);
+	clear_extra_refs();
+
 	return local_refs;
 }
 
-- 
1.5.5.159.g8c84b
Previous: Johan HerlandNext: Johan Herland
Message 9 of 13 in “Teach builtin-clone to pack refs”
  1. 0/3 Teach builtin-clone to pack refsJohan Herland, Mar 22, 2008
  2. 1/3 Move pack_refs() and friends into libgitJohan Herland, Mar 22, 2008
  3. 2/3 Prepare testsuite for a "git clone" that packs refsJohan Herland, Mar 22, 2008
  4. Daniel BarkalowApr 14, 2008
  5. Johan HerlandApr 14, 2008
  6. 1/4 Incorporate fetched packs in future object traversalJohan Herland, Apr 14, 2008
  7. 2/4 Move pack_refs() and friends into libgitJohan Herland, Apr 14, 2008
  8. 3/4 Prepare testsuite for a "git clone" that packs refsJohan Herland, Apr 14, 2008
  9. 4/4 Teach "git clone" to pack refsJohan Herland, Apr 14, 2008
  10. 3/3 Teach "git clone" to pack refsJohan Herland, Mar 22, 2008
  11. Daniel BarkalowMar 22, 2008
  12. Junio C HamanoMar 23, 2008
  13. Johan HerlandMar 23, 2008

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.