在构建结束时提交/推送对Azure DevOps存储库的更改

时间:2019-06-03 03:29:28

标签: git azure-devops

作为构建过程的一部分,我们更新版本号,并且要提交并将更改推回主存储库。这是托管在azure devops上的git repo,第一步是使用get source:

enter image description here 我使用以下代码在管道的末尾添加了命令行任务。似乎出了点问题,我该怎么做呢?谢谢。

git config --global user.email "my@email.address.com"
git config --global user.name "VSTS Admin"
git status

ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%

ECHO ADDING MODIFIED FILES
git add *.cs
git add *.build
git add *.wxs

ECHO CREATING COMMIT
git commit -m "Update version numbers for Build %BUILD_BUILDNUMBER%"
git push origin master

结果如下:

##[section]Starting: Commit/Push Changes To Git Repo
==============================================================================
Task         : Command Line
Description  : Run a command line script using cmd.exe on Windows and bash on macOS and Linux.
Version      : 2.148.0
Author       : Microsoft Corporation
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613735)
==============================================================================
Generating script.
========================== Starting Command Output ===========================
##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\a\_temp\8b19361b-8f47-4d31-834d-132fedb0b386.cmd""
HEAD detached at e7a1479d
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   ../../../Properties/AssemblyInfo.cs
        .. (more files modified)

SOURCE BRANCH IS refs/heads/master
ADDING MODIFIED FILES
CREATING COMMIT
[detached HEAD 5c1bf6dc] Update version numbers for Build myBuildNumber_5.1.001
 2 files changed, 2 insertions(+), 2 deletions(-)
error: src refspec master does not match any
error: failed to push some refs to     'https://{org}@dev.azure.com/{projectName}/_git/{reponame}'
##[error]Cmd.exe exited with code '1'.
##[section]Finishing: Commit/Push Changes To Git Repo

3 个答案:

答案 0 :(得分:0)

src refspec master does not match any”表示re不是要推送的本地主分支。

那是因为提交是在独立的HEAD(没有分支)中创建的

添加和提交之前,必须先使用git checkout -b master创建master分支。
更准确地说,如I mentioned here

git checkout master 2>/dev/null || git checkout -b master;

OP dan确认in the comments

  

在上一步获得源代码后,便签出了与主服务器(git checkout --progress --force e7a1479dc5d2139be5247a027721e2a88b44a890)不同的分支

根据定义,提交的检出直接在独立的HEAD中进行。

答案 1 :(得分:0)

  

错误:src refspec主服务器与任何主机都不匹配

     

错误:无法将一些引用推送到   'https:// {org} @ dev.azure.com / {projectName} / _git / {reponame}'

首先让我们假设您操作的仓库是A,而您要推送到的仓库是B。 出现此错误的原因是因为您的A和B存储库不同步。在推送A分支之前,必须确保B分支已同步,因此您应先将B分支拉到A上,然后再推送A分支,或尝试另一种方式:创建一个新的存储库(不生成新的提交) ),然后将A分支推送到新的存储库。

git cherry-pick <commitHash>

答案 2 :(得分:0)

需要注意的是:

  1. Azure Pipeline在触发管道的提交上执行git checkout。
    例如:git checkout <commit-hash-SHA1>
  2. 这被称为分离的HEAD 状态,因为存储库的头部现在指向提交本身,而不是指向任何有效分支。 (即HEAD已分离)
  3. 由于我们处于分离的HEAD状态,因此我们不能直接回退,而可以使用以下方法直接将其推送到目标分支。
    例如:git push <remote-repo-url> HEAD:refs/heads/<target-branch>可以是起源或完全限定的 repo-url
    git push url_with_pat HEAD:refs/heads/<target-branch>(网址也可以包含PAT(Github的个人访问令牌-具有对目标存储库的写访问权限),格式为:
    https://<username>:<PAT>@github.com/<username>/<repo>.git
    通过这种方式,我们可以将当前处于分离状态的管道本地提交历史记录追加到我们想要的任何目标分支。
  4. 由于我们仍然需要目标分支(或触发构建的源分支),我们可以使用environment variable $(Build.SourceBranch)中的format /refs/head/<branch>,因为它处于分离状态模式(uses refs-heads

如果您出于某种原因不尝试签出分支机构,则此功能特别有用

如果不需要上述方法,那么仍然可以使用经典的git checkout -b <branch>

直接检查特定分支

注意:可以用修剪后的$(Build.SourceBranch)代替,其中可以删除前缀/refs/heads/,然后再使用