Azure DevOps YAML Pipeline gitversion/execute任务因fetchDepth=1执行失败
执行GitVersion/execute任务时触发空引用异常,错误信息如下:
An unexpected error occurred: System.NullReferenceException: Object reference not set to an instance of an object. at LibGit2Sharp.Core.Handles.ObjectHandle.op_Implicit(ObjectHandle handle) in //LibGit2Sharp/Core/Handles/Objects.cs:line 509 at LibGit2Sharp.Core.Proxy.git_commit_author(ObjectHandle obj) in //LibGit2Sharp/Core/Proxy.cs:line 289 at
问题根源
Azure DevOps默认启用浅克隆,设置fetchDepth=1,仅拉取最近一次提交记录。但GitVersion需要完整的提交历史、标签等元数据来计算版本号,浅克隆导致LibGit2Sharp无法获取必要的提交信息,从而抛出空引用异常。
解决方法
由于无法直接在YAML中修改默认的fetchDepth,可通过以下方式绕过限制:
- 手动拉取完整Git历史和标签:
在GitVersion/execute任务前添加Bash或PowerShell任务,执行命令将浅克隆转为完整克隆并拉取所有标签:# Bash版本(适用于Linux/macOS代理) - bash: | git fetch --unshallow git fetch --tags displayName: '拉取完整Git历史与标签' # PowerShell版本(适用于Windows代理) - powershell: | git fetch --unshallow git fetch --tags displayName: '拉取完整Git历史与标签'
说明
浅克隆是Azure DevOps为提升流水线执行速度设置的默认行为,但GitVersion的版本计算逻辑依赖仓库的完整提交链和标签信息。通过git fetch --unshallow将当前浅克隆仓库转换为完整克隆,再拉取所有标签,即可满足GitVersion的运行需求,避免空引用异常。
内容的提问来源于stack exchange,提问作者Janusz Nowak

