git!alias在bash和Powershell中都可以使用

时间:2018-07-05 09:48:54

标签: bash git powershell git-config

您将如何实现一个git别名,该别名执行外部命令,并且可以同时在bash和Powershell中使用?

我目前为bash(在我的gitPrune中)和Powershell(在.bash_profile中)都设置了profile.ps1别名,它清除了不再需要的分支:

# bash
alias gitPrune="git remote prune origin; git branch --merged | grep -vEe '^\*| master$' | sed 's/.*/git branch -dv \0/e'"    

# Powershell
function gitPrune { git remote prune origin; git branch --merged | Select-String -NotMatch '^\*| master$' | %{git branch -dv $_.ToString().Trim()} }

这样,我可以从git-bash(在Windows上)和Powershell中gitPrune。现在,我想将其移至.gitconfig中,以与其他与git相关的别名保持一致。但是,无论打开Powershell控制台还是git-bash终端,都将使用相同的.gitconfig。如何使用git-config“外部命令”语法实现此“双重”命令?

[alias]
    myPrune = "! ..."

1 个答案:

答案 0 :(得分:1)

当git使用shell执行别名时,shell used是固定的编译时选项。通常是going to be /bin/sh

因此,您不必担心结果会有所不同,只需使用bash别名中的语法即可,而不必担心powershell。演示:

$ cat .git/config
[alias]
    shellpath = !pid=$$ && ps -o comm= $pid

$ bash -c 'git shellpath'
/bin/sh
$ pwsh -c 'git shellpath'
/bin/sh