Bash

git alias shell 命令出錯

  • January 30, 2021

我在帶有 git 1.7.1 的 cygwin 上使用 bash 版本 4.1.2(1)-release (x86_64-redhat-linux-gnu)。我想為需要使用輸入參數兩次的命令創建一個別名。按照這些說明,我寫了

[alias]
branch-excise = !sh -c 'git branch -D $1; git push origin --delete $1' --

我得到這個錯誤:

$> git branch-excise my-branch
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file

我最後都嘗試了 a-和 a --,但我得到了同樣的錯誤。我怎樣才能解決這個問題?

man git-config說:

語法相當靈活和寬鬆;空格大多被忽略。# 和 ; 字元開始註釋到行尾,空白行被忽略。

所以:

branch-excise = !bash -c 'git branch -D $1; git push origin --delete $1'

相當於:

#!/usr/bin/env bash

bash -c 'git branch -D $1

執行上面的腳本列印:

/tmp/quote.sh: line 3: unexpected EOF while looking for matching `''
/tmp/quote.sh: line 4: syntax error: unexpected end of file

一種解決方案是將整個命令放入"

branch-excise = !"bash -c 'git branch -D $1; git push origin --delete $1'"

但是,它仍然不起作用,因為$1它是空的:

$ git branch-excise master
fatal: branch name required
fatal: --delete doesn't make sense without any refs

為了使其工作,您需要在其中創建一個虛擬函式.gitconfig並像這樣呼叫它:

branch-excise = ! "ddd () { git branch -D $1; git push origin --delete $1; }; ddd"

用法:

$ git branch-excise  master
error: Cannot delete the branch 'master' which you are currently on.
(...)

引用自:https://unix.stackexchange.com/questions/239509