Merge branch 'sp/gc'

* sp/gc:
  Use 'repack -a -d -l' instead of 'repack -a -d' in git-gc
  everyday: replace a few 'prune' and 'repack' with 'gc'
  Create 'git gc' to perform common maintenance operations.
This commit is contained in:
Junio C Hamano 2006-12-27 16:43:15 -08:00
commit 7c20b8234a
6 changed files with 90 additions and 4 deletions

1
.gitignore vendored
View File

@ -42,6 +42,7 @@ git-fmt-merge-msg
git-for-each-ref git-for-each-ref
git-format-patch git-format-patch
git-fsck-objects git-fsck-objects
git-gc
git-get-tar-commit-id git-get-tar-commit-id
git-grep git-grep
git-hash-object git-hash-object

View File

@ -34,6 +34,9 @@ Everybody uses these commands to maintain git repositories.
* gitlink:git-repack[1] to pack loose objects for efficiency. * gitlink:git-repack[1] to pack loose objects for efficiency.
* gitlink:git-gc[1] to do common housekeeping tasks such as
repack and prune.
Examples Examples
~~~~~~~~ ~~~~~~~~
@ -41,10 +44,9 @@ Check health and remove cruft.::
+ +
------------ ------------
$ git fsck-objects <1> $ git fsck-objects <1>
$ git prune
$ git count-objects <2> $ git count-objects <2>
$ git repack <3> $ git repack <3>
$ git prune <4> $ git gc <4>
------------ ------------
+ +
<1> running without `\--full` is usually cheap and assures the <1> running without `\--full` is usually cheap and assures the
@ -53,7 +55,8 @@ repository health reasonably well.
disk space is wasted by not repacking. disk space is wasted by not repacking.
<3> without `-a` repacks incrementally. repacking every 4-5MB <3> without `-a` repacks incrementally. repacking every 4-5MB
of loose objects accumulation may be a good rule of thumb. of loose objects accumulation may be a good rule of thumb.
<4> after repack, prune removes the duplicate loose objects. <4> it is easier to use `git gc` than individual housekeeping commands
such as `prune` and `repack`. This runs `repack -a -d`.
Repack a small project into single pack.:: Repack a small project into single pack.::
+ +

64
Documentation/git-gc.txt Normal file
View File

@ -0,0 +1,64 @@
git-gc(1)
=========
NAME
----
git-gc - Cleanup unnecessary files and optimize the local repository
SYNOPSIS
--------
'git-gc'
DESCRIPTION
-----------
Runs a number of housekeeping tasks within the current repository,
such as compressing file revisions (to reduce disk space and increase
performance) and removing unreachable objects which may have been
created from prior invocations of gitlink:git-add[1].
Users are encouraged to run this task on a regular basis within
each repository to maintain good disk space utilization and good
operating performance.
Configuration
-------------
The optional configuration variable 'gc.reflogExpire' can be
set to indicate how long historical entries within each branch's
reflog should remain available in this repository. The setting is
expressed as a length of time, for example '90 days' or '3 months'.
It defaults to '90 days'.
The optional configuration variable 'gc.reflogExpireUnreachable'
can be set to indicate how long historical reflog entries which
are not part of the current branch should remain available in
this repository. These types of entries are generally created as
a result of using `git commit \--amend` or `git rebase` and are the
commits prior to the amend or rebase occuring. Since these changes
are not part of the current project most users will want to expire
them sooner. This option defaults to '30 days'.
The optional configuration variable 'gc.rerereresolved' indicates
how long records of conflicted merge you resolved earlier are
kept. This defaults to 60 days.
The optional configuration variable 'gc.rerereunresolved' indicates
how long records of conflicted merge you have not resolved are
kept. This defaults to 15 days.
See Also
--------
gitlink:git-prune[1]
gitlink:git-reflog[1]
gitlink:git-repack[1]
gitlink:git-rerere[1]
Author
------
Written by Shawn O. Pearce <spearce@spearce.org>
GIT
---
Part of the gitlink:git[7] suite

View File

@ -212,6 +212,9 @@ gitlink:git-cvsexportcommit[1]::
gitlink:git-cvsserver[1]:: gitlink:git-cvsserver[1]::
A CVS server emulator for git. A CVS server emulator for git.
gitlink:git-gc[1]::
Cleanup unnecessary files and optimize the local repository.
gitlink:git-lost-found[1]:: gitlink:git-lost-found[1]::
Recover lost refs that luckily have not yet been pruned. Recover lost refs that luckily have not yet been pruned.

View File

@ -157,7 +157,7 @@ BASIC_LDFLAGS =
SCRIPT_SH = \ SCRIPT_SH = \
git-bisect.sh git-checkout.sh \ git-bisect.sh git-checkout.sh \
git-clean.sh git-clone.sh git-commit.sh \ git-clean.sh git-clone.sh git-commit.sh \
git-fetch.sh \ git-fetch.sh git-gc.sh \
git-ls-remote.sh \ git-ls-remote.sh \
git-merge-one-file.sh git-parse-remote.sh \ git-merge-one-file.sh git-parse-remote.sh \
git-pull.sh git-rebase.sh \ git-pull.sh git-rebase.sh \

15
git-gc.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/sh
#
# Copyright (c) 2006, Shawn O. Pearce
#
# Cleanup unreachable files and optimize the repository.
USAGE=''
SUBDIRECTORY_OK=Yes
. git-sh-setup
git-pack-refs --prune &&
git-reflog expire --all &&
git-repack -a -d -l &&
git-prune &&
git-rerere gc || exit