试图将我的头缠在PowerShell上-函数,别名等

时间:2018-09-23 14:02:27

标签: git function powershell alias

我是一位经验丰富的C#程序员,但是到目前为止,我还只是涉猎PowerShell(到目前为止,还使用了另一种Windows命令行产品)。

我正在尝试使某些Git东西自动化,但遇到了一些困难,似乎无法找到解决这些问题的任何方法...(到目前为止,没有视频教程或博客文章对此有所帮助,或者。)

我想做的是定义使我在PowerShell中使用Git的工作更舒适的函数和别名-是的,我了解 Posh-Git ,并且也已将其签出-但这似乎主要是为了在PowerShell中呈现漂亮的UI。

我想为我一直使用的通用Git命令定义“快捷方式”,并且到目前为止已经成功定义了 some 别名。

我现在正在努力的是:我想为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'的位置参数。
  +设置别名gtpom invoke-gitpull原始主文件
  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + 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与我不同意:

  

Set-Alias:找不到与参数名称“ remote”匹配的参数。
  +设置别名gtpom invoke-gitpull-远程原点-分支主控
  + ~~~~~~~~
  + CategoryInfo:InvalidArgument:(:) [Set-Alias],ParameterBindingException
  + FullyQualifiedErrorId:NamedParameterNotFound,Microsoft.PowerShell.Commands.SetAliasCommand

然后我也尝试在函数内 使用参数:

但是我又遇到了同样的错误。

因此如何,我必须为我的invoke-gitpull函数定义这些参数才能起作用吗?我似乎转圈了,不太了解我在做什么错.....有人可以启发我吗?

1 个答案:

答案 0 :(得分:4)

别名(使用*-Alias cmdlet)只能指向仅 不带参数的命令名称。如果希望将别名的参数用作另一个别名(例如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 }