]> git.phdru.name Git - git-wiki.git/blobdiff - git-wiki.txt
Move README.html to gitweb/
[git-wiki.git] / git-wiki.txt
index 57ba2841df3073409166f467b39f2fb573662915..aa44ff2abae90d9f0837be851d72d3a41f878f92 100644 (file)
@@ -756,6 +756,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
 ----