git Azure DevOps/VSTS始终在干净的存储库上报告“DETACHED HEAD”

0tdrvxhp  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(137)

朋友们,
我现在已经厌倦了Azure DevOps/VSTS。Jenkins要好得多,现在仍然是,只是我的组织想使用Azure DevOps。
我有一个谜我需要帮助来解开。
以下是我从我的笔记本电脑的回购,它没有未跟踪或未提交的更改。

git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

git remote -v
origin  https://github.com/xxx/terraformvsts.git (fetch)
origin  https://github.com/xxx/terraformvsts.git (push)

你猜怎么着,Azure Devops总是抱怨它在每次构建执行时都有“分离的头”。
请注意“结帐”阶段的以下内容:

2019-02-05T05:55:33.2076875Z Note: checking out 'aad90fceecf39a7731c356ebfe2b547ddbce99e6'.
2019-02-05T05:55:33.2076992Z 
2019-02-05T05:55:33.2077872Z You are in 'detached HEAD' state. You can look around, make experimental
2019-02-05T05:55:33.2077939Z changes and commit them, and you can discard any commits you make in this
2019-02-05T05:55:33.2078179Z state without impacting any branches by performing another checkout.
2019-02-05T05:55:33.2078345Z 
2019-02-05T05:55:33.2078389Z If you want to create a new branch to retain commits you create, you may
2019-02-05T05:55:33.2078683Z do so (now or later) by using -b with the checkout command again. Example:
2019-02-05T05:55:33.2078717Z 
2019-02-05T05:55:33.2078933Z   git checkout -b <new-branch-name>
2019-02-05T05:55:33.2078966Z 
2019-02-05T05:55:33.2079004Z HEAD is now at aad90fc Clean Repository

构建管道的检验阶段如下所示:

如何解决这个问题?我应该不 checkout 吗?还是应该修改构建管道中的某个配置设置?

0g0grzrc

0g0grzrc1#

这就是Azure开发运维管道的设计方式。
如果你仍然需要 checkout “that”分支(或任何其他特定分支),你可以添加一个任务:

- task: CmdLine@2
  displayName: Checkout $(Build.SourceBranchName)
  inputs:
    script: 'git checkout $(Build.SourceBranchName)'
disho6za

disho6za2#

这不是抱怨,这就是Azure DevOps的工作方式。我在所有构建和所有回购上都看到了。没有任何问题。

xmq68pz9

xmq68pz93#

要 checkout 源分支,请运行此步骤:

- script: |
    source=$(Build.SourceBranch)
    git checkout ${source#"refs/heads/"}

git name-rev --name-only $(Build.SourceBranch)的解决方案对我不起作用。

0ejtzxu1

0ejtzxu14#

让我们在问题上有明确的看法。

  • 正在使用的分支在Azure管道中称为$(Build.SourceBranch)。
  • Azure管道从远程分支分离工作分支。
  • Azure管道删除对远程分支的 * 引用 *
  • 检出上游分支的当前版本的本地副本,适合对执行“git push”操作,可以通过这种方式完成。

==========================================================

steps:
- checkout: self
  clean: true
  persistCredentials: true

- script: |
   git fetch --all
   git switch $(basename $(Build.SourceBranch))

==========================================================
其他所需设置可能包括:

git config --local user.email "username@example.com"
   git config --local user.name "User Name"
s4n0splo

s4n0splo5#

我需要更新此内容。“git switch”在Azure管道环境中失败,因为不仅工作git存储库已分离,而且Azure管道还删除了对工作git配置中上游分支的引用。请改用类似以下内容的内容。

steps:
- checkout: self   clean: true   persistCredentials: true

- script: |
    git fetch --all
    git branch -D `basename Build.SourceBranch)` || true
    git switch `basename $(Build.SourceBranch)`

相关问题