]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Explain what the current branch is
[git-wiki.git] / pep-git.txt
index 08880df1ab19290f79993c33774f683c7980266a..c411bd9178348b3332973eb8fea6be013b48fdde 100644 (file)
@@ -50,7 +50,7 @@ Advanced documentation
 
 `Git Magic
 <http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html>`_,
-also with a number of translations.
+with a number of translations.
 
 `Pro Git <https://git-scm.com/book>`_. The Book about git. Buy it at
 Amazon or download in PDF, mobi, or ePub form. Has translations to
@@ -180,9 +180,10 @@ When you do an initial clone like this::
     $ git clone -b v1 http://git.python.org/python.git
 
 git clones remote repository ``http://git.python.org/python.git`` to
-directory ``python``, creates remote-tracking branches, creates a
-local branch ``v1``, configure it to track upstream remotes/origin/v1
-branch and checks out ``v1`` into the working directory.
+directory ``python``, creates a remote named ``origin``, creates
+remote-tracking branches, creates a local branch ``v1``, configure it
+to track upstream remotes/origin/v1 branch and checks out ``v1`` into
+the working directory.
 
 Updating local and remote-tracking branches
 -------------------------------------------
@@ -208,7 +209,8 @@ The second command fetches commits from the named $BRANCH in the
 $REMOTE repository that are not in your repository and updates both
 the local branch $BRANCH and its upstream remote-tracking branch. But
 it refuses to update branches in case of non-fast-forward. And it
-refuses to update the current branch.
+refuses to update the current branch (currently checked out branch,
+where HEAD is pointing to).
 
 The first command is used internally by ``git pull``.
 
@@ -641,7 +643,7 @@ Staging area
 Staging area aka index aka cache is a distinguishing feature of git.
 Staging area is where git collects patches before committing them.
 Separation between collecting patches and commit phases provides a
-very useful feature of git: one can review collected patches before
+very useful feature of git: you can review collected patches before
 commit and even edit them - remove some hunks, add new hunks and
 review again.
 
@@ -678,8 +680,8 @@ 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; merge commits are removed to have clean linear history and
+finish the 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
@@ -751,19 +753,70 @@ works: ``git commit -av`` works perfectly, but there are situations
 when it doesn't. E.g., ``git log -p -5`` cannot be combined as ``git
 log -p5``.
 
-TODO: sticky options; example: git grep -O.
+Some options have arguments, some even have default arguments. In that
+case the argument for such option must be spelled in a sticky way:
+``-Oarg``, never ``-O arg`` because for an option that has a default
+argument the latter means "use default value for option ``-O`` and
+pass ``arg`` further to the option parser". For example, ``git grep``
+has an option ``-O`` that passes found files to a program; default
+program for ``-O`` is pager (usually ``less``), but you can use your
+editor::
 
-TODO: bash/zsh completion, bash/zsh prompt.
-https://git.kernel.org/cgit/git/git.git/tree/contrib/completion
+    $ git grep -Ovim # but not -O vim
+
+BTW, there is a difference between running ``git grep -O`` and ``git
+grep -Oless`` - in the latter case ``git grep`` passes ``+/pattern``
+option to less.
+
+bash/zsh completion
+-------------------
+
+It's a bit hard to type ``git rebase --interactive --preserve-merges
+HEAD~5`` manually even for those who are happy to use command-line,
+and this is where shell completion is of great help. Bash/zsh come
+with programmable completion, often automatically preinstalled and
+enabled, so if you have bash/zsh and git installed, chances are you
+are already done - just go and use it at the command-line.
+
+If you don't have necessary bits preinstalled, install and enable
+bash_completion package. If you want to upgrade your git completion to
+the latest and greatest download necessary file from `git contrib
+<https://git.kernel.org/cgit/git/git.git/tree/contrib/completion>`_.
+
+Git-for-windows comes with git-bash for which bash completion is
+installed and enabled.
+
+bash/zsh prompt
+---------------
+
+For command-line lovers shell prompt can carry a lot of useful
+information. To include git information in the prompt use
+`git-prompt.sh
+<https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-prompt.sh>`_.
+Read the detailed instructions in the file.
+
+Search the Net for "git prompt" to find other prompt variants.
 
 
 git on server
 =============
 
-TODO: anonymous access (``git daemon``); git over ssh; gitolite;
-gitweb; cgit; Kallithea; pagure; gogs and gitea; gitlab.
-
-http://gitolite.com/gitolite/index.html
+The simplest way to publish a repository or a group of repositories is
+``git daemon``. The daemon provides anonymous access, by default it is
+read-only. The repositories are accessible by git protocol (git://
+URLs). Write access can be enabled but the protocol lacks any
+authentication means, so it should be enabled only within a trusted
+LAN. See ``git help daemon`` for details.
+
+Git over ssh provides authentication and repo-level authorisation as
+repositories can be made user- or group-writeable (see parameter
+``core.sharedRepository`` in ``git help config``). If that's too
+permissive or too restrictive for some project's needs there is a
+wrapper `gitolite <http://gitolite.com/gitolite/index.html>`_ that can
+be configured to allow access with great granularity; gitolite has a
+lot of documentation.
+
+TODO: gitweb; cgit; Kallithea; pagure; gogs and gitea; gitlab.
 
 https://git.kernel.org/cgit/git/git.git/tree/gitweb