X-Git-Url: https://git.phdru.name/?p=git-wiki.git;a=blobdiff_plain;f=git-wiki.txt;h=667417fd9d74cf81d26af8ff94fed0b884422801;hp=57ba2841df3073409166f467b39f2fb573662915;hb=HEAD;hpb=9aa2facfd9f4ac3ca5a4c68a97533d0c0e56043e diff --git a/git-wiki.txt b/git-wiki.txt index 57ba284..cdab237 100644 --- a/git-wiki.txt +++ b/git-wiki.txt @@ -49,11 +49,13 @@ many different languages. Download Russian translation from `GArik `Git Buch `_ (German). -Offline documentation ---------------------- +Builtin help +------------ -Git has builtin help: run ``git help $TOPIC``. For example, run -``git help git`` or ``git help help``. +Run ``git help $TOPIC``. For example, run ``git help git`` or +``git help help``. Run ``git help -a`` to list help topics for all +available commands; ``git help -g`` to list help guides, i.e. help topics +that aren't commands. Quick start @@ -79,6 +81,9 @@ install git with `Homebrew `_: ``brew install git``. `__) is a Git GUI written in Python and GPL licensed. Linux, Windows, MacOS X. +`GitAhead `_ is a completely free and open source +graphical Git client for Linux, Windows and macOS. + `TortoiseGit `_ is a Windows Shell Interface to Git based on TortoiseSVN; open source. @@ -756,6 +761,55 @@ See `WhatIsTheIndex Wiki. +Aliases +------- + +Recursive aliases +''''''''''''''''' + +Git doesn't allow recursive aliases. The expansion of an alias is +interpreted by git as a builtin command. I.e., in the following example +alias ``com`` doesn't work because there is no builtin command ``git +ci``:: + + [alias] + ci = commit + com = ci + +You can trick git by using shell. The following example works albeit a +bit slow:: + + [alias] + ci = commit + com = !git ci + + +Literal expansion +''''''''''''''''' + +Git interprets aliases literally. I.e., when expanding an alias git just +does simple textual substitution. That could be a surprise if an alias +is passed parameters on the command line. For example, the following +alias works without parameters -- it pushes configured branch(es) to all +configured remotes:: + + [alias] + push-to-all-remotes = !git remote | xargs -n1 git push + +But it doesn't work if a user wants to provide a list of branches to +push: the command ``git push-to-all-remotes master`` is expanded by git +as ``!git remote | xargs -n1 git push master`` which is certainly not +what the user wants -- remote's name must comes first, before branches. +This is a fix:: + + [alias] + push-to-all-remotes = !git remote | xargs -I% -n1 git push % + +Then the command ``git push-to-all-remotes master`` is expanded by git +as ``!git remote | xargs -I% -n1 git push % master``; xargs substitutes +``%`` with remote's name. + + Root ---- @@ -972,7 +1026,7 @@ Web interface to browse repositories can be created using `gitweb `_. Both are CGI scripts (written in Perl and C). In addition to web interface both provide read-only dumb http access for git (http(s):// URLs). `Klaus -`_ is a small and simple WSGI web +`_ is a small and simple WSGI web server that implements both web interface and git smart HTTP transport; supports Python 2 and Python 3, performs syntax highlighting.