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
+<https://gcc.gnu.org/ml/gcc/2007-12/msg00165.html>`_ 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
+<http://vcscompare.blogspot.ru/2008/06/git-repack-parameters.html>`_
+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