From 97f3e523886fffbea92e87a78b9e7ac1ceb9a94c Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Thu, 20 Aug 2015 05:08:24 +0300 Subject: [PATCH] Explain git gc, git repack, git fsck --- pep-git.txt | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/pep-git.txt b/pep-git.txt index f3b5e55..1d16640 100644 --- a/pep-git.txt +++ b/pep-git.txt @@ -680,11 +680,35 @@ https://git-scm.com/book/en/Git-Tools-Rerere Database maintenance ==================== -TODO: dangling objects, git gc, git repack. - -https://gcc.gnu.org/ml/gcc/2007-12/msg00165.html - -http://vcscompare.blogspot.ru/2008/06/git-repack-parameters.html +Git object database and other files/directories under .git require +periodic maintenance and cleanup. For example, commit editing left +unreferenced objects (dangling objects, in git terminology) and these +objects should be pruned to avoid collecting cruft in the DB. The +command ``git gc`` can be used for maintenance. Git runs ``git gc +--auto`` as a part of some commands to do quick maintenance. Users are +recommended to run ``git gc --aggressive`` from time to time; ``git +help gc`` recommends to run it every few hundred changesets; for more +intensive projects it should be something like once a week and less +frequent (biweekly or monthly) for lesser active projects. + +``git gc --aggressive`` not only removes dangling objects, it also +repacks object database into indexed and better optimized pack(s). +Another way to do it is to run ``git repack``. + +There is a well-known `message +`_ from Linus +Torvalds regarding "stupidity" of ``git gc --aggressive``. The message +can safely be ignored now. It is old and outdated, ``git gc +--aggressive`` became much better since that time. + +For those who still prefer ``git repack`` over ``git gc --aggressive`` +the recommended parameters are ``git repack -a -d -f --depth=20 +--window=250``. See `this detailed experiment +`_ +for explanation on the effects of these parameters. + +From time to time run ``git fsck [--strict]`` to verify integrity of +the database. Tips and tricks -- 2.39.5