Syntax for Git aliases with multiple commands
I want to create a Git alias to perform multiple commands, but I cant find documentation on how this is done.
From 'man git-config'
alias.*
Command aliases for the git(1) command wrapper - eg after defining "alias.last = cat-file commit HEAD", the invocation "git last" is equivalent to "git cat-file commit HEAD". To avoid confusion and troubles with script usage, aliases that hide existing Git commands are ignored. Arguments are split by spaces, the usual shell quoting and escaping is supported. quote pair and a backslash can be used to quote them.
If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command. For example, defining "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new" is equivalent to running the shell command "gitk --all --not ORIG_HEAD". Note that shell commands will be executed from the top-level directory of a repository, which may not necessarily be the current directory. GIT_PREFIX is set as returned by running git rev-parse --show-prefix from the original current directory. See git-rev-parse(1).
$ git config alias.q '!echo a; echo b'
$ git q
Output:
a
b
I think this is (rudimentarily) documented in man git-config
under alias.*
Note that git commands should include git, unlike in normal aliases. It is caused by fact that it is treated as a shell command, not as a git command (see manpage quoted in the question). For example to chain
git init
and
git commit --allow-empty -m "empty initial commit"
it is necessary to create
"!git init; git commit --allow-empty -m "empty initial commit""
alias.
Say the commands are echo a
and echo b
(not a
and b
), to add multiple commands for an alias q
:
From the command line:
git config alias.q '!echo a; echo b'
Directly in the configuration file:
[alias]
q = "!echo a; echo b"
For more complex things, define a shell function and call it:
'!f() { echo a ; echo b ; }; f'
For passing parameters to the commands see:
Git alias with positional parameters
Git Alias - Multiple Commands and Parameters
Based in Jonathan Wakely's comment
Addendum Answer: Often I need more complex commands that decide what to do through positional parameters and branch on the parameters or loop through parameters or input files.
Such commands are too complex for single liners and they are hard to read and edit on one line. But I found a real simple method to do very complex commands from files:
Assume you have a file called alias/cmd
in your repository:
!function f {
if [ -z "$1" ]
then echo "Please give me some argument!" 1>&2
exit -1
fi
echo "Hello $1"
}; f
then you can simply say
git config alias.cmd "`cat alias/cmd`"
to define the alias cmd
from the file and
git config --get alias.cmd > alias/cmd
to write the defined alias to the file.
链接地址: http://www.djcxy.com/p/49764.html上一篇: git同时推送到多个存储库
下一篇: 具有多个命令的Git别名的语法