git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Kevin Ballard <kevin@sb.org>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: git filter-branch should run git gc --auto
Date: Tue, 22 Jan 2008 18:52:21 -0800	[thread overview]
Message-ID: <7vwsq1p82i.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7v1w89qmw3.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Tue, 22 Jan 2008 18:46:52 -0800")

Junio C Hamano <gitster@pobox.com> writes:

> Kevin Ballard <kevin@sb.org> writes:
>
>> I just glanced at git-filter-branch.sh (and I must say I was
>> incredibly surprised to find out it was a shell script) and it seems
>> it never runs git-gc or git-repack. Doesn't that end up with the same
>> problems as git-svn sans git-repack when filtering a large number of
>> commits? I was just thinking, if I were to git-filter-branch on my
>> massive repo (in fact, the same repo that started this thread, with
>> over 33000 commits in the upstream svn repo), even if I just do
>> something as simple as change the commit msg wont I end up with
>> thousands of unreachable objects? I shudder to think how many
>> unreachable objects I would have if I pruned the entire dports
>> directory off of the tree.

Another thing I forgot to say in my previous message.  The old
refs are kept in reflogs and also in refs/original/, so you will
not be creating new unreachables even if you rewrite many objects.

>> Am I missing something, or does git-filter-branch really not do any
>> garbage collection? I tried reading the source, but complex bash
>> scripts are almost as bad as perl in terms of readability.
>
> Theoretically yes, and it largely depends on what you do, but
> filter-branch goes over the objects that already exists in your
> repository, and hopefully you won't be rewriting majority of
> them.
>
> So the impact of not repacking is probably much less painful in
> practice.
>
> But again as I said, it largely depends on what you do in your
> filter.  If you are upcasing (or convert to NFD ;-)) the
> contents of all of your blob objects, you would certainly want
> to repack every once in a while.

Something like this, perhaps?

 git-filter-branch.sh |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index ebf05ca..8e44001 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -299,6 +299,12 @@ while read commit parents; do
 			die "msg filter failed: $filter_msg"
 	sh -c "$filter_commit" "git commit-tree" \
 		$(git write-tree) $parentstr < ../message > ../map/$commit
+
+	if test $(( $i % 512 )) = 0
+	then
+		git gc --auto
+	fi
+
 done <../revs
 
 # In case of a subdirectory filter, it is possible that a specified head

  reply	other threads:[~2008-01-23  2:53 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-18 12:17 git-svn should default to --repack Kevin Ballard
2008-01-18 15:56 ` Karl Hasselström
2008-01-18 20:44   ` Junio C Hamano
2008-01-19 12:35     ` Karl Hasselström
2008-01-19 15:05       ` Kevin Ballard
2008-01-19 22:36       ` [PATCH] Let "git svn" run "git gc --auto" occasionally Karl Hasselström
2008-01-19 22:50         ` Harvey Harrison
2008-01-20  3:37           ` Eric Wong
2008-01-20  9:34             ` Karl Hasselström
2008-01-20 19:17               ` Junio C Hamano
2008-01-21 22:48                 ` Eric Wong
2008-01-22  0:30                   ` Junio C Hamano
2008-01-22  0:39                     ` Eric Wong
2008-01-22  1:52                       ` Junio C Hamano
2008-01-23  2:43                         ` git filter-branch should run git gc --auto Kevin Ballard
2008-01-23  2:46                           ` Junio C Hamano
2008-01-23  2:52                             ` Junio C Hamano [this message]
2008-01-23  3:03                               ` Kevin Ballard
2008-01-23  2:54                             ` Harvey Harrison
2008-01-23  2:58                             ` Kevin Ballard
2008-01-23  5:07                               ` Sam Vilain
2008-01-23  8:18                                 ` Kevin Ballard
2008-01-23  6:44                             ` Mike Hommey
2008-01-23 13:00                               ` Johannes Schindelin
2008-01-23 19:22                               ` Junio C Hamano
2008-02-03 16:55                   ` [PATCH 0/2] "git svn" and "git gc --auto" Karl Hasselström
2008-02-03 16:56                     ` [PATCH 1/2] git-svn: Don't call git-repack anymore Karl Hasselström
2008-02-03 16:56                     ` [PATCH 2/2] Let "git svn" run "git gc --auto" occasionally Karl Hasselström
2008-01-20 21:39               ` [PATCH 1/2] git-svn: Don't call git-repack anymore Karl Hasselström
2008-01-20 21:40               ` [PATCH 2/2] Let "git svn" run "git gc --auto" occasionally Karl Hasselström

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=7vwsq1p82i.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=kevin@sb.org \
    /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).