@matheusbsbs / matheus-bagliano / commits / 3e8aded203
Fork 0

Teach "git clone" to pack refs

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> Acked-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johan Herland committed Jun 15, 2008 at 16:06 UTC 3e8aded20329bef35470eb469281f6b275d19dea
1 file changed +6 -2
builtin-clone.c
+6 -2
@@ -18,6 +18,7 @@
18 #include "transport.h"
19 #include "strbuf.h"
20 #include "dir.h"
21 +#include "pack-refs.h"
22
23 /*
24 * Overall FIXMEs:
@@ -321,8 +322,11 @@ static struct ref *write_remote_refs(const struct ref *refs,
322 get_fetch_map(refs, tag_refspec, &tail, 0);
323
324 for (r = local_refs; r; r = r->next)
324 - update_ref(reflog,
325 - r->peer_ref->name, r->old_sha1, NULL, 0, DIE_ON_ERR);
325 + add_extra_ref(r->peer_ref->name, r->old_sha1, 0);
326 +
327 + pack_refs(PACK_REFS_ALL);
328 + clear_extra_refs();
329 +
330 return local_refs;
331 }
332