git-gc: do not run git-prune by default.

git-prune is not safe when run uncontrolled in parallel while
other git operations are creating new objects.  To avoid
mistakes, do not run git-prune by default from git-gc.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2007-01-21 23:28:28 -08:00
parent a0022eebf3
commit e3ff4b2447
2 changed files with 32 additions and 3 deletions

View file

@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
SYNOPSIS
--------
'git-gc'
'git-gc' [--prune]
DESCRIPTION
-----------
@ -21,6 +21,21 @@ Users are encouraged to run this task on a regular basis within
each repository to maintain good disk space utilization and good
operating performance.
OPTIONS
-------
--prune::
Usually `git-gc` packs refs, expires old reflog entries,
packs loose objects,
and removes old 'rerere' records. Removal
of unreferenced loose objects is an unsafe operation
while other git operations are in progress, so it is not
done by default. Pass this option if you want it, and only
when you know nobody else is creating new objects in the
repository at the same time (e.g. never use this option
in a cron script).
Configuration
-------------

View file

@ -4,12 +4,26 @@
#
# Cleanup unreachable files and optimize the repository.
USAGE=''
USAGE='git-gc [--prune]'
SUBDIRECTORY_OK=Yes
. git-sh-setup
no_prune=:
while case $# in 0) break ;; esac
do
case "$1" in
--prune)
no_prune=
;;
--)
usage
;;
esac
shift
done
git-pack-refs --prune &&
git-reflog expire --all &&
git-repack -a -d -l &&
git-prune &&
$no_prune git-prune &&
git-rerere gc || exit