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:
parent
a0022eebf3
commit
e3ff4b2447
@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-gc'
|
'git-gc' [--prune]
|
||||||
|
|
||||||
DESCRIPTION
|
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
|
each repository to maintain good disk space utilization and good
|
||||||
operating performance.
|
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
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
18
git-gc.sh
18
git-gc.sh
@ -4,12 +4,26 @@
|
|||||||
#
|
#
|
||||||
# Cleanup unreachable files and optimize the repository.
|
# Cleanup unreachable files and optimize the repository.
|
||||||
|
|
||||||
USAGE=''
|
USAGE='git-gc [--prune]'
|
||||||
SUBDIRECTORY_OK=Yes
|
SUBDIRECTORY_OK=Yes
|
||||||
. git-sh-setup
|
. 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-pack-refs --prune &&
|
||||||
git-reflog expire --all &&
|
git-reflog expire --all &&
|
||||||
git-repack -a -d -l &&
|
git-repack -a -d -l &&
|
||||||
git-prune &&
|
$no_prune git-prune &&
|
||||||
git-rerere gc || exit
|
git-rerere gc || exit
|
||||||
|
Loading…
Reference in New Issue
Block a user