Browse Source

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>
maint
Junio C Hamano 18 years ago
parent
commit
e3ff4b2447
  1. 17
      Documentation/git-gc.txt
  2. 18
      git-gc.sh

17
Documentation/git-gc.txt

@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository @@ -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 @@ -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
-------------


18
git-gc.sh

@ -4,12 +4,26 @@ @@ -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

Loading…
Cancel
Save