英文:
TF401398: The pull request cannot be activated because the source and/or the target branch no longer exists, or the requested refs are not branches
问题
在使用Azure DevOps的Golang API创建pull request时,我遇到了以下错误:
错误:
TF401398:无法激活pull request,因为源分支和/或目标分支不存在,或者请求的引用不是分支
代码:
connection := azuredevops.NewPatConnection("organizationUrl", "PAToken")
ctx := context.Background()
client, _ := azuregit.NewClient(ctx, connection)
pr := azuregit.CreatePullRequestArgs{}
repoId := git.repository.Name
proname := "MVC Test -Demo"
pr.Project = &proname
pr.RepositoryId = &repoId
sourceBranch := "feature-test"
targetBranch := "main"
pr.GitPullRequestToCreate = &azuregit.GitPullRequest{
TargetRefName: &targetBranch,
SourceRefName: &sourceBranch,
Description:   &git.configuration.PrRequestMessage,
Title:         &git.configuration.PrRequestTitle,
}
_, err := client.CreatePullRequest(ctx, pr)
英文:
I was getting the following errors while creating a pull-request using azuredevops golang API
error:
TF401398: The pull request cannot be activated because the source and/or the target branch no longer exists, or the requested refs are not branches
Code :
    connection := azuredevops.NewPatConnection("organizationUrl", "PAToken")
	ctx := context.Background()
	client, _ := azuregit.NewClient(ctx, connection)
	pr := azuregit.CreatePullRequestArgs{}
	repoId := git.repository.Name
	proname := "MVC Test -Demo"
	pr.Project = &proname
	pr.RepositoryId = &repoId
    sourceBranch:= "feature-test"
    targetBranch:= "main"
	pr.GitPullRequestToCreate = &azuregit.GitPullRequest{
		TargetRefName: &targetBranch,
		SourceRefName: &sourceBranch,
		Description:   &git.configuration.PrRequestMessage,
		Title:         &git.configuration.PrRequestTitle,
	}
	_, err := client.CreatePullRequest(ctx, pr)
答案1
得分: 4
这个问题通过在分支前加上refs/heads/来修复了。
sourceBranch := "refs/heads/feature-test"
targetBranch := "refs/heads/main"
pr.GitPullRequestToCreate = &azuregit.GitPullRequest{
    TargetRefName: &targetBranch,
    SourceRefName: &sourceBranch,
    Description:   &git.configuration.PrRequestMessage,
    Title:         &git.configuration.PrRequestTitle,
}
_, err := client.CreatePullRequest(ctx, pr)
英文:
This issue got fixed by prefixing a refs/heads/ to the branch
        sourceBranch:= "refs/heads/feature-test"
        targetBranch:= "refs/heads/main"
    	pr.GitPullRequestToCreate = &azuregit.GitPullRequest{
    		TargetRefName: &targetBranch,
    		SourceRefName: &sourceBranch,
    		Description:   &git.configuration.PrRequestMessage,
    		Title:         &git.configuration.PrRequestTitle,
    	}
        _, err := client.CreatePullRequest(ctx, pr)
答案2
得分: 0
我遇到了相同的问题(尽管是在Azure DevOps中),每次都有其他修复方法可行:
错误:使用状态码400创建拉取请求失败。消息:TF401398:无法激活拉取请求,因为源分支和/或目标分支不再存在,或者请求的引用不是分支(StandardError)
- 重新创建丢失的分支(查看流水线日志中的最后一个400错误)
 - 在YAML中的main中添加refs/heads/(参见下面的示例)
 - 转到项目设置 > 选择您的存储库 > 转到“安全性” > 选择“项目集合构建服务帐户用户” > 启用对拉取请求的“允许”和对创建分支的“允许”
查看图像描述 - 为您的代理添加唯一的PAT(参见下面的示例)
 
---
schedules:
  - cron: '0 2 * * *'
    displayName: 'yourdisplayname'
    always: true
    branches:
      include:
        - main
trigger: none
stages:
  - stage: CheckDependencies
    displayName: 'dependabot run'
    jobs:
      - job: Dependabot
        displayName: 'Run Dependabot'
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: AzureKeyVault@2
            inputs:
              connectedServiceName: 'name'
              keyVaultName: 'kvname'
              secretsFilter: 'azureDevOpsAccessToken'
              runAsPreJob: true
          - task: dependabot@1
            inputs:
              azureDevOpsAccessToken: '$(azureDevOpsAccessToken)'  
          - task: dependabot@1
            inputs:
              packageManager: 'nuget'
              targetBranch: 'refs/heads/main'
英文:
I had the same issue (though in Azure DevOps) and each time another fix worked:
Error: Pull Request creation failed with status 400. Message: TF401398: The pull request cannot be activated because the source and/or the target branch no longer exists, or the requested refs are not branches (StandardError)
- recreate the missing branch (see last 400 error in your pipeline log)
 - add refs/heads/ to main in your YAML (see below example)
 - go to project settings > select your repo > go to 'security'> select Project Collection Build Service Accounts user > enable 'Allow' for contribute to pull requests and 'Allow' for Create branch
enter image description here - add unique PAT for your agent (see example below)
 
        ---
    schedules:
      - cron: '0 2 * * *'
        displayName: 'yourdisplayname'
        always: true
        branches:
          include:
            - main
    
    trigger: none
    
    stages:
      - stage: CheckDependencies
        displayName: 'dependabot run'
        jobs:
          - job: Dependabot
            displayName: 'Run Dependabot'
            pool:
              vmImage: 'ubuntu-latest'
            steps:
              - task: AzureKeyVault@2
                inputs:
                  connectedServiceName: 'name'
                  keyVaultName: 'kvname'
                  secretsFilter: 'azureDevOpsAccessToken'
                  runAsPreJob: true
    
              - task: dependabot@1
                inputs:
                  azureDevOpsAccessToken: '$(azureDevOpsAccessToken)'  
    
              - task: dependabot@1
                inputs:
                  packageManager: 'nuget'
                  targetBranch: 'refs/heads/main'
答案3
得分: 0
遇到相同的问题,让我告诉你一个秘密!
不要保留一个名为"dependaboat"的分支。
因此,对于每个依赖项,dependaboat尝试在"dependaboat"文件夹下创建一个分支,但是如果已经存在同名的分支,Azure无法创建文件夹。
英文:
Having the same issue and let me tell you a secret!
don't keep a branch with the name dependaboat.
so for each dependency, dependaboat tries to create a branch under the folder "dependaboat" but Azure fails to create a folder if a branch with the same name already exists.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论