mirror of
https://github.com/git/git.git
synced 2026-03-02 11:36:26 +00:00
Create 'git gc' to perform common maintenance operations.
Junio asked for a 'git gc' utility which users can execute on a regular basis to perform basic repository actions such as: * pack-refs --prune * reflog expire * repack -a -d * prune * rerere gc So here is a command which does exactly that. The parameters fed to reflog's expire subcommand can be chosen by the user by setting configuration options in .git/config (or ~/.gitconfig), as users may want different expiration windows for each repository but shouldn't be bothered to remember what they are all of the time. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
committed by
Junio C Hamano
parent
4aec56d12b
commit
30f610b7b0
1
.gitignore
vendored
1
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
64
Documentation/git-gc.txt
Normal file
64
Documentation/git-gc.txt
Normal 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
|
||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -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
15
git-gc.sh
Executable 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 &&
|
||||||
|
git-prune &&
|
||||||
|
git-rerere gc || exit
|
||||||
Reference in New Issue
Block a user