git! alias, который будет работать как в bash, так и в Powershell - PullRequest
0 голосов
/ 05 июля 2018

Как бы вы реализовали псевдоним git, который выполняет внешние команды и работает как из bash, так и из Powershell?

В настоящее время у меня есть псевдоним gitPrune, настроенный как для bash (в моем .bash_profile), так и в Powershell (в 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()} }

Таким образом, я могу gitPrune как из git-bash (в Windows), так и из Powershell. Теперь я хотел бы перенести это в мой .gitconfig, чтобы сохранить вместе с другими псевдонимами, связанными с git. Тем не менее, тот же .gitconfig будет использоваться независимо от того, открыта ли у меня консоль Powershell или открыт терминал git-bash. Как мне реализовать эту "двойную" команду, используя синтаксис git-config "external command"?

[alias]
    myPrune = "! ..."

1 Ответ

0 голосов
/ 06 июля 2018

Когда git использует оболочку для выполнения псевдонима, оболочка, используемая , является фиксированной опцией во время компиляции. Обычно будет /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
...