Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell中返回Git提交id_Git_Powershell - Fatal编程技术网

在Powershell中返回Git提交id

在Powershell中返回Git提交id,git,powershell,Git,Powershell,我正在使用下面的代码git提交更改并返回commitid function gitcommit() { git commit -a -m "message" $commitid= git rev-parse HEAD git push -q $comid=$commitid return $comid } function main() { $commitid= gitcommit() Write-Host "Commit id is $commiti

我正在使用下面的代码git提交更改并返回commitid

function gitcommit()
{

   git commit -a -m "message"
   $commitid= git rev-parse HEAD
   git push -q
  $comid=$commitid
   return $comid
}

function main()
{

  $commitid= gitcommit() 
  Write-Host "Commit id is $commitid"


}
gitcommit
函数中,我将获得正确的提交id,如
7de234567f68fa8a3b40a95abc4d6d82a75d93
。 但我面临的问题是,当以字符串形式返回提交id时,它是以类型系统的形式出现的。包含以下内容的数组

 On branch master, Your branch is up to date with 'origin/master'., , nothing to commit, working tree clean, On branch master, Your branch is up to date with 'origin/master'., , nothing to commit, working tree clean,7de234567f68fa8a3b40a95abc4d6d82a75d93

这里发生了一些事情:

  • 函数返回一个对象数组,因为您没有抑制某些命令的输出写入输出流的任何内容都会沿着管道传递和返回
  • return
    关键字不是必需的。在PowerShell中,
    return
    函数更像
    Write Output$variable;break
    -它将变量写入输出流,然后返回到父范围。除非您希望在其余代码运行之前停止函数的执行,否则这不是必需的
  • 要防止您的
    git commit
    命令使管道饱和,请将命令输出通过管道传输到
    Out Null
    Write Host
    或其他流之一。这将非常详细地介绍重定向和输出流。或者,您可以将
    -q
    开关与
    git push
    git commit
    一起使用来抑制它们的输出,但是我建议您将输出通过管道传输到
    Verbose
    流或
    Information
    流,如果您仍然希望看到这些信息,但不希望以编程方式对其进行操作
  • 这不会给您带来问题,但不要用括号调用PowerShell函数
    ()
    。是的,在静态方法或实例方法中使用括号,但在函数中使用括号最终将作为子表达式进行计算,这将有效地将多个参数组合成一个参数
  • 将添加到函数定义允许您在cmdlet上调用自动参数。例如,
    gitcommit-Verbose
    将为执行
    gitcommit
    启用详细流,您将能够看到其他详细输出
  • 考虑在每个git命令之后检查
    $LASTEXITCODE-eq 0
    ——该命令不能保证成功,在这种情况下,您可能希望输出不同的内容
  • 考虑到以上几点,您的代码可以进行如下改进:

    function gitcommit
    {
       [CmdletBinding()] 
       git commit -a -m "message" | Write-Verbose
       if( $LASTEXITCODE -ne 0 ){
         Write-Warning "``git commit`` failed with exit code ${LASTEXITCODE}"
         return # Return now because the commit failed
       }
    
       git rev-parse HEAD # This does not need to be returned because it outputs to the output stream
       git push | Write-Verbose
       if( $LASTEXITCODE -ne 0 ){
         Write-Warning "``git push`` failed with exit code ${LASTEXITCODE}"
       }
    }
    
    function main()
    {
    
      $commitid= gitcommit
      Write-Host "Commit id is $commitid"
    }
    

    -z
    标志添加到
    git commit
    命令以抑制其输出。