【问题标题】:How do I get the difference between the main branch and the pull request one in Azure DevOps pipeline?如何在 Azure DevOps 管道中获取主分支和拉取请求之间的区别?
【发布时间】:2020-12-06 19:51:32
【问题描述】:

我正在尝试在 2 个分支之间获取新的/更改的 PowerShell 文件。从主要的一个和我在 Azure DevOps 管道中做拉取请求的一个:

$changedFiles = (git diff --cached --name-only | Where-Object { $_ -like "*.ps1" })

但是当命令在本地工作时我没有得到任何信息。我认为它需要更改管道中的位置,但是在尝试找到一些存储库文件后我找不到它。它应该在执行之前下载文件吗? 更多代码片段:

pre-commit.ps1

Get-Location # returns D:\a\1\s
Get-ChildItem # returns nothing
gci -recurse -filter "test.ps1" # returns nothing
$changedFiles = (git diff --cached --name-only | Where-Object { $_ -like "*.ps1" })
$exitCode = 0
$changedFiles # returns none

if ($changedFiles.length -eq 0) {
    exit $exitCode
}
else{
   ...
}

azure-pipelines.yml

trigger:
- main

jobs:
 - job: RunScript
   pool:
     vmImage: windows-2019
   steps:
     - powershell:
         .\pre-commit.ps1

更新

$files = (git diff --name-only HEAD HEAD~1 | Where-Object {$_ -match '\w*.ps[m]?1' })

【问题讨论】:

    标签: git powershell azure-devops azure-pipelines


    【解决方案1】:

    git diff --cached 只会显示索引(使用git add 暂存的文件)和当前提交之间的差异。
    虽然它可能会在您的工作副本中显示修改(在您的工作计算机上,您可能处于在提交文件之前已修改和暂存文件的状态),但它通常不会在 CI 管道中运行的副本中工作(通常,例如,CI 管道中的操作不涉及修改代码文件和运行 git add)。


    如果您想列出在提交 eacf11eacf22 之间修改的文件,请删除 --cached 选项并简单地运行:

    git diff --name-only eacf11 eacf22
    

    您也可以通过标签名称或分支名称引用提交,也可以使用HEAD 表示“当前提交”:

    git diff --name-only master HEAD
    git diff --name-only v1.2.1 eacf22
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多