Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Syntax for Git aliases with multiple commands

Tags:

git

I want to create a Git alias to perform multiple commands, but I cant find documentation on how this is done.

  1. What is the syntax for Git aliases with multiple commands?
  2. Where is this documented?

From 'man git-config'

   alias.* 

Command aliases for the git(1) command wrapper - e.g. 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).

like image 956
Mike Rylander Avatar asked Sep 17 '13 22:09

Mike Rylander


People also ask

How do I make an alias command in git?

It is important to note that there is no direct git alias command. Aliases are created through the use of the git config command and the Git configuration files. As with other configuration values, aliases can be created in a local or global scope.

How do I run multiple git commands?

All you have to do is to create a file and add all your commands in the same sequence in which you want to execute. That's it!

Where do I put git alias?

Your git aliases are often stored per your user's configuration at ~/. gitconfig . You can also manually set aliases using, for example, the command git config alias.


2 Answers

$ 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.

like image 190
sehe Avatar answered Sep 30 '22 20:09

sehe


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

like image 20
brita_ Avatar answered Sep 30 '22 21:09

brita_