使用 git branch 指令建立 branch 有個小缺點,就是branch name 不可以摻雜空格。e.g.

git branch branchname can not contain space

就會出現以下提示

usage: git branch [options] [-r | -a] [--merged | --no-merged]
   or: git branch [options] [-l] [-f] <branchname> [<start-point>]
   or: git branch [options] [-r] (-d | -D) <branchname>...
   or: git branch [options] (-m | -M) [<oldbranch>] <newbranch>
Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -t, --track           set up tracking mode (see git-pull(1))
    --set-upstream        change upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --abbrev[=<n>]        use <n> digits to display SHA-1s
Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    --list                list branch names
    -l, --create-reflog   create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation (when already exists)
    --no-merged <commit>  print only not merged branches
    --merged <commit>     print only merged branches

 
搜尋了一下似乎沒有很直觀的解決方式。決定使用客製化 git 指令的方式來解決。
客製化指令其實相當簡單。
只有2個步驟,
1.建立指令檔案。
2.將指令檔案加到PATH環境變數中。


 
我的目標為自動把branch name的空格轉換為底線。e.g.
當我輸入(xxx為 git 自定義指令名稱)

git xxx branchname can not contain space

該指令會建立一個branch轉換為 branchname_can_not_contain_space,等同於輸入

git branch branchname_can_not_contain_space

 
首先
1.建立指令檔案,使用shell script來完成。
這裡要注意命名規則,指令檔案必須以 git- 開頭,後面接上你想取的名字,不需要副檔名。
以本範例來說我把它命名為 git-branchbaseline

#!/bin/bash
concat_parameters_with_baseline()
{
finalName=$@
for var in "$@"
do
finalName=${finalName/ /_}
done
echo create new branch, name:$finalName
git branch $finalName
}
concat_parameters_with_baseline $@

然後需要開放git-branchbaseline 的權限。
輸入

sudo chmod /complete/path/of/git-branchbaseline 777

 
2.考慮到之後可能會建立其他客製化指令,建立專門存放指令的資料夾在 /complete/path/of/git_customize_commands,並放入剛剛的git-branchbaseline。
將資料夾加到環境變數PATH

export PATH=$PATH:/complete/path/of/git_customize_commands

 
Update 20160622!!!
export 方式只能對目前開啟的的 Terminal 有作用,如果希望環境變數維持有效可以考慮修改 ~/.bashrc (使用bash的情況)。
因為我用的是zsh,所以需要修改 ~/.zshrc,開啟~/.zshrc 並加入

export PATH=$PATH:/complete/path/of/git_customize_commands

 
完成!!!
接著只要到 git repo 測試新指令即可。

git branchbaseline branchname can not contain space