【问题标题】:Why Gerrit is unable to create branch by itself?为什么 Gerrit 不能自己创建分支?
【发布时间】:2013-12-16 08:28:46
【问题描述】:

this answermy own question 之后,我有一个简单的(希望如此)问题。

如果我正在推送一个特定的分支,并且正确设置了所有必需的引用:

git checkout 82-blah-blah
git push origin HEAD:refs/for/82-blah-blah

为什么我总是得到:

! [remote rejected] HEAD -> refs/for/82-blah-blah (branch 82-blah-blah not found)

我总是必须去 Gerrit 的 UI 并手动创建那个分支?

这不是一个显而易见的步骤,Gerrit 可以简单地自动化吗?还是我错过了什么?

【问题讨论】:

  • 作为一种解决方法,首先进行初始直接推送以创建分支本身
  • 如果我这样做,将创建分支,但更改本身(在 Gerrit 中)不会而且我会迷失方向,无法解决此问题情况。看到这两个我的问题:onetwo
  • 首先创建本地分支而不进行任何新更改 - git checkout -b <branch> origin/master 然后远程:git push origin <branch> 或通过 Gerrit UI
  • @HiB:为此,您需要 Gerrit 权限才能直接推送,这对于普通用户来说通常是不可取的 - 毕竟,Gerrit 的重点是所有提交都应该通过代码审查。 OP 希望在提交通过审查后创建分支(并且没有这个烦人的错误消息)。

标签: git version-control gerrit


【解决方案1】:

接受的答案是指允许用户使用 SSH 创建分支的功能,它添加的只是CreateBranchCommand。最初的issue request 可能实际上指的是@trejder 想要的,但实现只是通过SSH 命令创建分支。

我的印象是,如果您拥有创建引用权限,则可以推送到 ref/for/new-branch,但我错了,只是测试了一下,它不起作用。它只允许您创建新分支,但直接推送到它们。

猜猜最快的方法是:

git checkout master
git push origin HEAD:new-branch
git checkout new-branch
git push origin HEAD:/refs/for/new-branch

【讨论】:

  • 我的回答没有错,新的 Gerrit 功能正是 OP 所要求的。阅读this carefully:我真正希望能够使用 Gerrit 做的是:git push origin HEAD:refs/for/some-new-branch,一旦推送的代码通过审查,就会创建新的分支。
  • 我必须同意mvp。我实际上是在问,为什么我必须使用 UI 来做同样的事情,Gerrit 可以自动化什么?假设我在 Git Bash 和 Gerrit 的 UI 中使用Ctrl+CCtrl+V 来使用完全相同的分支名称,我有完全相同的机会拼错分支名称或创建许多分支名称如果 Gerrit 能为我自动化该过程,我会这样做。
  • 我认为 trejder 想要什么很清楚,我同意 @mvp 的观点,即 issue 1156 中的原始功能请求将匹配所要求的内容,但没有证据表明该问题的修复已实施按照最初的要求。正如另一条评论中所指出的,Change 52500 仅执行问题最后一段中描述的备份计划。
【解决方案2】:

此功能was implemented 是最近推出的,将在Gerrit v2.9 中提供。

【讨论】:

  • 天啊!直到版本 2.9 为止,还没有实现这种基本的基本功能! :]
  • AFAICT 将在 Gerrit 2.9 中提供的新分支创建 REST 和 SSH 命令不会解决最初的问题。这只是手动创建分支的两种新方法,但从第一天起,通过git push 就可以创建分支。我怀疑@trejder 认为这是一个“基本的基本功能”的观点源于一种误解,即创建分支是一项常见任务,在上传更改时或多或少总是执行,而实际上这是用户通常不会执行的罕见操作不允许这样做。
  • @MagnusBäck:你错了。新功能将创建目标分支此提交通过审查,这是OP想要的
  • @mvp:这种行为在哪里实现或描述? Change 52500 这是issue 1156 中提到的唯一更改,仅添加了 SSH 命令。该更改未解决在更改提交时创建分支的原始功能请求。
【解决方案3】:

使用这个简单的 bash 脚本创建一个新分支并将其推送到 gerrit。 用法:Branch_name 和 CommitId 需要 2 个输入

#!/bin/bash 
read -p "Enter New Branch Name: " Branch_Name 

read -p "Enter CommitID:" CommitID 

git fetch --all 

git branch $Branch_Name $CommitID 

git push origin $Branch_Name:$Branch_Name 

git checkout $Branch_Name 

git branch --set-upstream-to=origin/$Branch_Name $Branch_Name

【讨论】:

    【解决方案4】:

    假设新分支是“myNewBranch”

    git checkout master
    git push origin HEAD:myNewBranch
    

    在提交一些更改以推送新提交后:

    git push origin myNewBranch
    

    为我工作。但是..

    不知道为什么不能在此之后将相同的提交推送到 master,反之亦然 - 如果我在 master 中打开 PR 进行审查,则无法将相同的提交推送到“myNewBranch”。要做到这一点,必须放弃 PR 来掌握,然后挑选提交到新的本地分支,然后推送到远程“myNewBranch”

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2011-11-06
      • 2019-09-18
      • 2014-03-07
      相关资源
      最近更新 更多