如何在 Azure CI 管道上进行 git diff

got*_*sth 5 git continuous-integration git-diff azure azure-pipelines

git diff我\xe2\x80\x99m 面临在 Azure DevOps 管道环境中工作的挑战。这是管道脚本,用于将 git HEAD 与之前的提交进行比较,并仅复制已更改的文件。HEAD^git 命令在本地运行良好,但在 Azure 管道中会失败,因为CI 运行中没有。寻求建议,这样的比较在 Azure 中是否可行,以及我如何实现这一目标。

\n
- task: PowerShell@2\n  inputs:\n    targetType: \'inline\'\n    script: |\n      $targetfolder = "$(Build.StagingDirectory)" + "/"\n      \n      function CopyFiles{\n          param( [string]$source )\n      \n          $target = $targetfolder + $source\n      \n          New-Item -Force $target\n          copy-item $source $target -Force\n      }\n      \n      $changes = git diff --name-only --relative --diff-filter AMR HEAD^ HEAD .\n      \n      if ($changes -is [string]){ CopyFiles $changes }\n      else\n      {\n          if ($changes -is [array])\n          {       \n              foreach ($change in $changes){ CopyFiles $change }\n          }\n      }\n
Run Code Online (Sandbox Code Playgroud)\n

错误消息如下所示:\n在此输入图像描述

\n

我认为在Azure管道设置中,当它检查重新定位时,它只提取最新的提交,而没有完整的提交历史记录。这就是为什么当 git 尝试获取以前的提交(例如 )时HEAD^,它找不到任何内容。

\n

预先非常感谢您的帮助!

\n

got*_*sth 6

我刚刚找到了解决这个问题的方法。在这里为可能有类似问题的任何人发布答案。

默认情况下,构建代理在管道构建期间从存储库执行“浅层获取”。这仅获取最新的提交,没有任何其他提交历史记录。要获取更多提交或禁用浅层获取,请参阅 Microsoft 的此文档。有一个选项可以指定提取深度或禁用浅层提取。

希望能帮助到你!