Попытка обернуть голову вокруг PowerShell - функции, псевдонимы и т. Д. - PullRequest
0 голосов
/ 23 сентября 2018

Я опытный программист на C #, но до сих пор я только немного баловался с PowerShell (пока использовал другой альтернативный продукт командной строки Windows).

Я пытаюсь автоматизировать некоторые вещи из Git, и я столкнулся с некоторыми трудностями и, похоже, не могу найти какое-либо решение этих проблем ... (и, похоже, ни один видеоурок или пост в блоге пока что не очень помогли).

Что яя пытаюсь сделать, это определить функции и псевдонимы, которые делают мою работу с Git в PowerShell более удобной - и да, я знаю о Posh-Git , и проверил это тоже - но это, кажется,В основном я имею в виду представление приятного пользовательского интерфейса в PowerShell.

Я бы хотел определить «горячие клавиши» для обычной команды Git, которую я использую все время, - и до сих пор успешно определил некоторые псевдонимы.

То, с чем я сейчас борюсь, заключается в следующем: я хотел бы иметь псевдоним для git pull (а также git push), который может запускаться «как есть» - например, простоgit pull, или который может запуститьНаиболее частая команда, которую мне нужно использовать - git pull origin master.

Я попытался определить одну функцию:

function invoke-gitpull { git pull $args }

, а затем определить два псевдонима для этого - один простовызывая эту функцию «как есть», один из которых предоставляет два параметра, например:

Set-Alias gtp invoke-gitpull 
Set-Alias gtpom invoke-gitpull origin master

Но почему-то PS не нравится: - (

Set-Alias:Невозможно найти позиционный параметр, который принимает аргумент 'origin'.
+ Set-Alias ​​gtpom invoke-gitpull origin master
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Set-Alias], ParameterBindingException
+ FullyQualifiedErrorId: PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetAliasCommand

Затем я также попытался определить параметры для функции invoke-gitpull, например:

function invoke-gitpull ([String] $remote, [String] $branch) { git pull $remote $branch }

, думая, что если я предоставлю без значений параметров , тогда будет выдано git pull - и если я предоставлю два значения параметров - invoke-gitpull -remote origin -branch master, то будет вызвано git pull origin master - но, опять же, PS не согласен с остальнымиh me:

Set-Alias: Невозможно найти параметр, который соответствует имени параметра 'remote'.
+ Set-Alias ​​gtpom invoke-gitpull -remote origin -branch master
+~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Set-Alias], ParameterBindingException
+ FullyQualifiedErrorId: NamedParameterNotFound, Microsoft.PowerShell.Commands.SetAliasCommand

* 1055Затем я также попытался с параметрами внутри функции:

, но я снова получил ту же ошибку.

Так что КАК мне нужно определить этипараметры для моей invoke-gitpull функции, чтобы это работало?Я, кажется, иду по кругу, не совсем понимая, что я делаю неправильно ... Может кто-нибудь просветить меня?

1 Ответ

0 голосов
/ 23 сентября 2018

Псевдонимы (с использованием командлетов *-Alias) ограничены указанием на имена команд * только 1004 * , без аргументов .Если вы хотите, чтобы аргументы вашего псевдонима были в качестве другого псевдонима (например, gtp origin master), вам необходимо определить их как functions :

function invoke-gitpull { git pull $args }
Set-Alias -Name gtp -Value invoke-gitpull
function gtpom { gtp origin master }

, но если это просто частный- Я бы пропустил псевдонимы и просто включил их в $Profile так, как вы хотите:

function gtp() { & GIT.exe pull @args }
function gtpom() { gtp origin master }
...