From: Junio C Hamano Date: Mon, 22 Jan 2007 07:28:28 +0000 (-0800) Subject: git-gc: do not run git-prune by default. X-Git-Tag: v1.5.0-rc3~89 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=e3ff4b244726f89620201e3295f097cf00b6b502;p=git.git 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 --- diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt index 2bcc9491a..e37758ad1 100644 --- a/Documentation/git-gc.txt +++ b/Documentation/git-gc.txt @@ -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 ------------- diff --git a/git-gc.sh b/git-gc.sh index 6de55f729..3e8c87c81 100755 --- a/git-gc.sh +++ b/git-gc.sh @@ -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