1

我正在我的 Azure DevOps YAML 管道中执行一个 git 命令,以获取两个提交之间的更改,例如git diff commit1 commit2 --name-only通过 PowerShell 脚本 - 请参阅下面的完整代码:

Write-Information "git diff --name-only $git_event_before $git_event_after --diff-filter=ACM ""*.txt"""
$txt_files = @($(git diff --name-only $git_event_before $git_event_after --diff-filter=ACM "*.txt"))
$txt_files = $txt_files | ForEach-Object { Join-Path $root_path $_ | Get-Item }

if ($txt_files.Count -eq 0) {
    Write-Error "Something went wrong, could not find any changed .txt files using the above 'git diff'"
}

这会引发一个错误,声称未找到任何文件。但是,如果我在git diff本地执行相同的命令,我也同步了存储库,它会按预期返回更改的文件。

我是否需要手动更新管道的结帐步骤已经下载的存储库?

4

1 回答 1

0

你能试着用这种方式运行“git diff”吗

$gitDiffCmd = 'diff "origin/{0}" "origin/{0}@{{1}}" --name-only' -f $buildSourceBranch
$gitCommitFiles = Invoke-Git $gitDiffCmd

function Invoke-Git {
    [CmdletBinding()]
    [OutputType([string])]
    param (
        [Parameter(Mandatory)]
        [string] $Command 
    )
    try {
        $old_env = $env:GIT_REDIRECT_STDERR
        $env:GIT_REDIRECT_STDERR = '2>&1'
        $response = Invoke-Expression "git $Command "
        return $response
    } catch {
        Write-Host $_.ScriptStackTrace
    } finally {
        $env:GIT_REDIRECT_STDERR = $old_env
    }
}
于 2022-02-09T06:47:14.327 回答