创建包含bash命令替换和参数的git别名

时间:2019-03-30 15:08:45

标签: bash git git-alias

知道了:

git diff $(git status -s | awk 'FNR == $LINE_NUM {print $2}')

...其中,行号是按状态输出的文件。

现在,我想在.gitconfig中为此命令创建一个别名:

[alias]
diff-num = $WHAT_SHOULD_I_PUT_HERE?

我希望该别名根据我将在命令行中键入的行号参数运行git的diff命令。我是bash的新手,我不确定是否需要bash函数来处理此问题或如何将参数传递给替代命令。

2 个答案:

答案 0 :(得分:1)

好的,解决了。 Git别名看起来像这样:

diff-num = ! diff_num

bash函数是这样的:

diff_num () {
    line=${1:-1}
    git diff $(git status -s | awk 'FNR == '$line' {print $2}')
}

必须使用以下bash命令将功能导出到您的bash配置文件中:

export -f diff_num

答案 1 :(得分:1)

通常的形式是使用常规的! shell逸出,定义一个任意命名的shell函数并运行它,git为它提供args。我的转到对象之一是lgdo

git config alias.lgdo '!f() { git log --graph --decorate --oneline "${@---all}"; }; f'

另外,我有grgrl作为git config --get-regexp {,--local}的别名:

[alias]
        grl = "!f() { git config --local --get-regexp \"${@-.}\"; }; f"
        gr = "!f() { git config --get-regexp \"${@-.}\"; }; f"