Cho-Ching's Blog

[Git] g< alias > = .gitconfig + .bashrc

主要參考: The Ultimate Git Alias Setup,

每天都要用到的git command, 若乖乖打字每天都要打好多重複的指令, 當然有效的利用alias可以幫我們節省很多時間, 整理如下。

.gitconfig

我的.gitconfig部份:

[alias]
  a = add
  ap = add -p

  c = commit --verbose
  ca = commit -a --verbose
  cm = commit -m
  cam = commit -a -m
  m = commit --amend --verbose

  d = diff
  dst = diff --stat
  ds = diff --staged


  s = status -s
  ss = status 

  co = checkout
  cob = checkout -b

  br = branch

  p = push -u origin --all

.gitconfig新增alias有幾個好處, 第一可以不用打那麼多字, 例如git status只要打git s就可, 並且支援git command auto completion, 例如輸入git s按下tab鍵, 就會顯示s開頭的參數。

g <alias>

另外一種加入Git Alias方法就是加入shell等級的aliasses, 例如在.bashrc中:

# .bashrc
alias gs="git status -s"

這樣重新載入.bashrc後, 直接輸入gs就執行git status -s

壞處就是無法和Git本身的alias system整合, 並且無法使用git autocompletion。另外~/.gitconfig有把整個git aliases獨立出來管理的優點。

那另外一個想法就是那alias我用.gitconfig管理, 我只要在shell層級設定:

alias g="git"

這樣我就可以輸入像是g s,或是g st這樣, 但是這樣也無法使用git command completion, 需要改寫成這樣:

alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g

就可以使用g <alias>的快速指令。

g<alias>

不過老是要在g<alias>間多個空白, 總是覺得用起來不夠爽快,

~/.bashrc加入以下:

# g<alias>
source /usr/share/bash-completion/completions/git

function_exists() {
    declare -f -F $1 > /dev/null
    return $?
}

for al in `__git_aliases`; do
    alias g$al="git $al"

    complete_func=_git_$(__git_aliased_command $al)
    function_exists $complete_fnc && __git_complete g$al $complete_func
done

這樣就可以使用gs(相當於git status)的alias指令, 並且只要我們在.gitconfig新增新的alias, 就可以自動使用新的g<alias>, 方便多了!

More

The Ultimate Git Alias Setup

Must Have Git Aliases: Advanced Examples

Super Useful Need To Know Git Commands

<< 回到文章列表