您将如何实现执行外部命令的git别名,并且可以在bash和Powershell上工作?
我目前为 bash(在我的.bash_profile
中(和 Powershell(profile.ps1
年(设置了一个gitPrune
别名,用于清理不再需要的分支:
# bash
alias gitPrune="git remote prune origin; git branch --merged | grep -vEe '^*| master$' | sed 's/.*/git branch -dv /e'"
# Powershell
function gitPrune { git remote prune origin; git branch --merged | Select-String -NotMatch '^*| master$' | %{git branch -dv $_.ToString().Trim()} }
这样,我就可以从git-bash(在Windows上(和PowershellgitPrune
。现在我想把它移到我的.gitconfig
,与其他与 git 相关的别名保持一致。但是,无论我是否打开了Powershell控制台或git-bash终端,都将使用相同的.gitconfig
。如何使用 git-config "外部命令"语法实现此"双重"命令?
[alias]
myPrune = "! ..."
当 git 使用 shell 执行别名时,使用的 shell 是一个固定的编译时选项。 它通常会/bin/sh
.
因此,您无需担心结果不同,只需使用bash别名中的语法即可,而不必担心powershell。要演示:
$ cat .git/config [别名] shellpath = !pid=$$ && ps -o comm= $pid $ bash -c 'git shellpath'/bin/sh $ pwsh -c 'git shellpath'/bin/sh