]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Explain rerere
[git-wiki.git] / pep-git.txt
index 1d1664044e4616e6fd2640e87cfc3c20f759a71a..942aa34b002272f3714527a267b9f323d376b24f 100644 (file)
@@ -662,7 +662,7 @@ To see the diff between the index and the last commit (i.e., collected
 patches) use ``git diff --cached``. To see the diff between the
 working tree and the index (i.e., uncollected patches) use just ``git
 diff``. To see the diff between the working tree and the last commit
-(i.e., both collected and uncollected patches) use ``git diff HEAD``.
+(i.e., both collected and uncollected patches) run ``git diff HEAD``.
 
 See `WhatIsTheIndex
 <https://git.wiki.kernel.org/index.php/WhatIsTheIndex>`_ and
@@ -674,26 +674,52 @@ Wiki.
 ReReRe
 ======
 
-https://git-scm.com/book/en/Git-Tools-Rerere
+Rerere is a mechanism that helps to resolve repeated merge conflicts.
+The most frequent source of recurring merge conflicts are topic
+branches that are merged into mainline and then the merge commits are
+removed; that's often performed to test the topic branches and train
+rerere; merge commits are removed to have clean history and finish a
+topic branch with only one last merge commit.
+
+Rerere works by remembering the states of tree before and after a
+successful commit. That way rerere can automatically resolve conflicts
+if they appear in the same files.
+
+Rerere can be used manually with ``git rerere`` command but most often
+it's used automatically. Enable rerere with these commands in a
+working tree::
+
+    $ git config rerere.enabled true
+    $ git config rerere.autoupdate true
+
+You don't need to turn rerere on globally - you don't want rerere in
+bare repositories or repositories without branches; you only need
+rerere in repos where you often perform merges and resolve merge
+conflicts.
+
+See `Rerere <https://git-scm.com/book/en/Git-Tools-Rerere>`_ in The
+Book.
 
 
 Database maintenance
 ====================
 
-Git object database and other files/directories under .git require
+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.
+command ``git gc`` is used for maintenance. Git automatically 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 frequently (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``.
+repacks object database into indexed and better optimized pack(s); it
+also packs symbolic references (branches and tags). 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
@@ -708,7 +734,8 @@ the recommended parameters are ``git repack -a -d -f --depth=20
 for explanation on the effects of these parameters.
 
 From time to time run ``git fsck [--strict]`` to verify integrity of
-the database.
+the database. ``git fsck`` may produce a list of dangling objects;
+that's not an error, just a reminder to perform regular maintenance.
 
 
 Tips and tricks
@@ -726,7 +753,7 @@ git on server
 =============
 
 TODO: anonymous access (``git daemon``); git over ssh; gitolite;
-gitweb; cgit; gitlab.
+gitweb; cgit; Kallithea; pagure; gogs and gitea; gitlab.
 
 http://gitolite.com/gitolite/index.html
 
@@ -734,6 +761,15 @@ https://git.kernel.org/cgit/git/git.git/tree/gitweb
 
 http://git.zx2c4.com/cgit/
 
+https://kallithea-scm.org/
+
+https://pagure.io/
+
+http://gogs.io/ and http://gitea.io/
+
+https://about.gitlab.com/
+
+
 From Mercurial to git
 =====================