# Best way to optimize a git repository?

2 messages from 2008-05-03 to 2008-05-03. Participants: skillzero@gmail.com, Stephen R. van den Berg.
Thread: https://gitlist.dev/t/13360

## skillzero@gmail.com, 2008-05-03 00:34

Subject: Best way to optimize a git repository?
Message-ID: <2729632a0805021734h72196639x8789a00ce9be4059@mail.gmail.com>
URL: https://gitlist.dev/e/2729632a0805021734h72196639x8789a00ce9be4059%40mail.gmail.com

```
I want to periodically optimize my repositories even if it takes a
long time to run the command. Should I do 'git gc --aggressive', 'git
repack -a -d', 'git prune', or some combination? The documentation
implies that things like git gc will use git repack, but I'm sort of
looking for the definitive answer of what I should run to fully
optimize my repositories. These are relatively new repositories, all
created with git 1.5.5.1.

I also read somewhere (but can't find now) that some of these commands
shouldn't be run while other people might be accessing the repository.
I want to run these commands on a server that multiple people clone
and pull from and push to. Is that safe to do? I'm okay if clone,
pull, or push fail during this time (although I'd prefer if they
didn't fail), I just don't want to corrupt the repository.

```

## Stephen R. van den Berg, 2008-05-03 10:02

Subject: Re: Best way to optimize a git repository?
Message-ID: <20080503100235.GA16989@cuci.nl>
URL: https://gitlist.dev/e/20080503100235.GA16989%40cuci.nl
In-Reply-To: <2729632a0805021734h72196639x8789a00ce9be4059@mail.gmail.com>

```
skillzero@gmail.com wrote:
>I want to periodically optimize my repositories even if it takes a
>long time to run the command. Should I do 'git gc --aggressive', 'git

>I also read somewhere (but can't find now) that some of these commands
>shouldn't be run while other people might be accessing the repository.

Caveat emptor, indeed.

I have in my /etc/gitconfig the following:

[repack]
   UseDeltaBaseOffset = true
[pack]
   compression = 9
[alias]
   packall = !rm -rf .git/ORIG_HEAD .git/FETCH_HEAD .git/index .git/logs .git/info/refs .git/objects/pack/pack-*.keep .git/refs/original .git/refs/patches .git/patches && git prune --expire now && git repack -a -d --window=200 && git gc

A subsequent "git packall" does the trick, but this is best done on an
otherwise idle repository.
-- 
Sincerely,                                                          srb@cuci.nl
           Stephen R. van den Berg.
"What do I do when I see someone *extremely gorgeous*?
 I stare, I smile, and when I get tired... I put the mirror down."

```
