gerrit - first commit

2023-05-16

最近公司有新项目,已经让领导帮我把clone和push的权限都开通了,但是在push的时候还是提交失败,错误信息如下:

$ git push origin master

Counting objects: 26, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (26/26), done.

Writing objects: 100% (26/26), 4.28 KiB | 257.00 KiB/s, done.

Total 26 (delta 21), reused 0 (delta 0)

remote: Resolving deltas: 100% (21/21)

remote: True

remote: Branch refs/heads/master:

remote: You are not allowed to perform this operation.

remote: To push into this reference you need 'Push' rights.

remote: User: deparks

remote: Please read the documentation and contact an administrator

remote: if you feel the configuration is incorrect

remote: Processing changes: refs: 1, done

To ssh://192.168.1.125:29418/bluetoothsmart.git

! [remote rejected]       master-> master (prohibited by Gerrit)

error: failed to push some refs to 'To ssh://192.168.1.125:29418/bluetoothsmart.git'

折腾挺久后没找到原因,就去百度了一下,于是就找到了这篇文章,恰好解决了我的问题,因此记录一下。

以下内容转自:http://blog.sina.com.cn/s/blog_4b5039210102e5o5.html

gerrit还是轻易不要尝试引入,它的权限管理,真是复杂极了。对于小型团队,初期这将是个噩梦,但是对于像OpenStack,安卓这种大型team,又是一把利器。

下面尝试测试了两个用户的简单情况,很多配置都是系统默认,没有进行啥复杂配置,即使这样也是错误百出,光一个commit就要折腾半天,而且还有些机制没搞清楚。
首先要做的准备工作就是准备两个gerrit用户,user1和user2,并且分别把user1和user2的ssh pub-key通过gerrit setting添加好。
1. 首先user1创建一个叫HelloWord的project。
如何创建project请参考前期博客或者官方文档。
2. user1在自己的工作环境中把HelloWord clone下来
[user1@jenkins ~]$ git clone ssh://user1@gerrit.example.com:29418/HelloWorld.git
Initialized empty Git repository in /home/user1/HelloWorld/.git/
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
加入user1没有添加ssh pubkey的话,这一步会出permission deny。

clone后,创建一个README文件并add,commit。
[user1@jenkins ~]$ cd HelloWorld
[user1@jenkins HelloWorld]$ ls
[user1@jenkins HelloWorld]$ touch README
[penxiao@jenkins test]$ git add README 
[penxiao@jenkins test]$ git commit -m add README
这里注意一点,在下面要push之前,一定要配置好git config的 username和email
可以通过命令行或者直接编辑 ~/.gitconfig文件实现,而且email一定要和gerrit里注册的email一致,否者push也会出错。
[user1@jenkins HelloWorld]$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done   
To ssh://user1@gerrit.example.com:29418/HelloWorld.git
 * [new branch]     master -> master
在gerrit的gitweb链接可以查看push的文件。
3. user2加入
[user2@jenkins ~]$ git clone ssh://user1@gerrit.example.com:29418/HelloWorld.git
Initialized empty Git repository in /home/user2/HelloWorld/.git/
remote: Counting objects: 3, done
remote: Finding sources: 100% (3/3)
remote: Total 3 (delta 0), reused 3 (delta 0)
Receiving objects: 100% (3/3), done.
[user2@jenkins ~]$ cd HelloWorld
[user2@jenkins HelloWorld]$ ls
README
user2对README文件进行修改,然后要commit,push。
!!!也同样注意,user2的git config,username和email的配置,email要和gerrit setting里的一致。 commit完以后可以看到:
[user2@jenkins HelloWorld]$ git log
commit 7959fe47bc2d2f53539a1861aa6b0d71afe0a531
Author: user2 <user2@gerrit.com>
Date:   Thu Dec 12 00:24:53 2013 -0500
    edit README
commit 98099fc0de3ba889b18cf36f9a5af267b3ddb501
Author: user1 <user@gerrit.com>
Date:   Thu Dec 12 00:15:08 2013 -0500
    add README
现在user2要把这次的改变push到gerrit,可以么? 不行的,可以看到:
[user2@jenkins HelloWorld]$ git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 249 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Branch refs/heads/master:
remote: You are not allowed to perform this operation.
remote: To push into this reference you need 'Push' rights.
remote: User: user2
remote: Please read the documentation and contact an administrator
remote: if you feel the configuration is incorrect
remote: Processing changes: refs: 1, done   
To ssh://user2@gerrit.example.com:29418/HelloWorld.git
 ! [remote rejected] master -> master (prohibited by Gerrit)
error: failed to push some refs to 'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
这就是gerrit的精髓所在了。原因是gerrit不允许直接将本地修改同步到远程仓库。客户机必须先push到远程仓库的refs/for/*分支上,等待审核。这也是为什么我们需要使用gerrit的原因。gerrit本身就是个代码审核工具。
接下来更该push的地址,这一步很重要:  
[user2@jenkins HelloWorld]$ git config remote.origin.push refs/heads/*:refs/for/*
 
此命令实际是更改的是本地仓库test_project/.git/config文件。 
再次push, 这次不要加master:
[user2@jenkins HelloWorld]$ git push origin
Counting objects: 5, done.
Writing objects: 100% (3/3), 249 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done   
remote: ERROR: missing Change-Id in commit message footer
remote: Suggestion for commit message:
remote: edit README
remote: 
remote: Change-Id: I7959fe47bc2d2f53539a1861aa6b0d71afe0a531
remote: 
remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user2@gerrit.example.com:hooks/commit-msg ${gitdir}/hooks/
remote: 
remote: 
To ssh://user2@gerrit.example.com:29418/HelloWorld.git
 ! [remote rejected] master -> refs/for/master (missing Change-Id in commit message footer)
error: failed to push some refs to 'ssh://user2@gerrit.example.com:29418/HelloWorld.git'
尼玛,还是不行,说缺change-Id,为了能让每次commit能自己insert 这个change-id,需要从gerrit server上下载一个脚本。
[user2@jenkins HelloWorld] scp -p 29418 user2@gerrit.example.com:hooks/commit-msg <local path to your git>/.git/hooks/
然后重新commit,使用参数--amend, 直接wq保存退出:
[user2@jenkins HelloWorld]$ git commit --amend
再次查看git log:
[user2@jenkins HelloWorld]$ git log
commit f6b5919170875b5b4870fca2ab906c516c97006e
Author: user2 <user2@gerrit.com>
Date:   Thu Dec 12 00:24:53 2013 -0500
    edit by user2
    
    Change-Id: Ieac68bebefee7c6d4237fa5c058386bf7c4f66b7
commit 98099fc0de3ba889b18cf36f9a5af267b3ddb501
Author: user1 <user1@gerrit.com>
Date:   Thu Dec 12 00:15:08 2013 -0500
    add README
这次就有了change id,  然后再次push:
[user2@jenkins HelloWorld]$ git push origin
Counting objects: 5, done.
Writing objects: 100% (3/3), 289 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done    
remote: 
remote: New Changes:
remote:  http://gerrit.example.com:8080/1
remote: 
To ssh://user2@gerrit.example.com:29418/HelloWorld.git
 * [new branch]     master -> refs/for/master
终于尼玛成功了!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gerrit - first commit 的相关文章

  • 如何删除Github上和本地的最后n次提交?

    我正在尝试从我的 GitHub 存储库之一删除最后 2 次提交 我已经按照建议尝试了here https stackoverflow com questions 448919 how can i remove a commit on git
  • 如何仅列出将提交的文件?

    有什么方法可以获取当我键入以下内容时将提交的文件列表 git commit m my changes git status 列出太多 我可以去掉所有的词 但我不愿意 我不想被告知有关未跟踪文件的信息 我试过了 git ls files md
  • Bitbucket REST接口和GIT;如何从分支获取两个标签之间的日志历史记录

    我正在构建一个应用程序 它需要 git 对远程源上的分支提交的所有提交注释 我们的存储库托管在 BitBucket 服务器上 是一个 Git 存储库 我查看了 Bitbucket Stash REST api 我可以通过浏览提交来带回 gi
  • 如果您仍然需要执行相同的步骤,那么 git merge 比 svn merge 更好吗?

    看完之后Git 中的合并如何比 SVN 中更好 https stackoverflow com questions 2471606 how and or why is merging in git better than in svn我还是
  • 无法在 Gerrit 中合并

    每当我向 Gerrit 发送评论并且该评论等待一段时间时 我都会收到cannot mergeGerrit 中的消息 我理解它的到来 因为其他人会更改相同的文件并在我之前交付 我正在尝试以下解决方法来解决我的问题 放弃当前的审查 创建一个新的
  • git:更改文件中的一行以获得完整的历史记录

    当我启动 git repo 时 我提交了一些文件作为初始提交 现在 在多次提交之后 我注意到我在这些文件中包含了一行我不想发布的信息 与其余代码不同 所以我想删除 更改这一行 and 保留其余的的代码 搜索周围我发现了这个解决方案 插入一个
  • 从 Git 中删除过时的提交

    我已经进行了一些测试提交 以测试提交挂钩 并且始终将索引重置为我最后一次正常提交 现在这些过时的提交仍然存在 gt git reflog fcdabf7 HEAD 0 reset moving to fcdabf7e01845d6f000f
  • GitHub 源代码视图显示不再存在的提交

    两周前我重写了 GitHub 存储库的历史 rebase 和一些精选 并通过强制将其推回 GitHub git push f origin master 一切都很顺利 至少看起来是这样git log显示了正确的提交历史记录 我知道 重写历史
  • 提交者电子邮件地址在 IntelliJ 中不匹配,即使将其更改为更正也是如此

    当我尝试在 IntelliJ idea 中将我的提交从 git 存储库推送到 Linux 环境中的 gerrit 远程存储库时 出现以下错误 remote ERROR committer email address K remote ERR
  • 如何在 Windows 上获得 git 分支的图形表示,真正显示存储库的拓扑?

    我的最后一个问题已关闭 因为显然是重复的并且已得到多次答复 然而 没有一个答案提到 无法在终端中显示 Git 树 https stackoverflow com questions 1064361 unable to show a git
  • 为什么即使在配置之后 Git 也不允许我提交?

    这个问题看起来像是重复的 但事实并非如此 只是一个不断重复的细微差别 git 不断告诉我 请告诉我你是谁 即使在设置之后也是如此 当我跑步时git commit 这就是我得到的 git commit Please tell me who y
  • 将 postgreSQL 存储过程作为一个事务执行

    我正在使用 PostgreSQL 9 3 并且创建了一些包含多个语句的存储过程 我在准备好的语句的帮助下在 Java 应用程序中调用此存储过程 现在我读到存储过程中的每个语句都作为一个事务执行 即每个语句后一次提交 但我想要的是将整个存储过
  • 每次在生产服务器上更新 Mercurial 分支时是否都必须合并并提交?

    我在最近的一个项目中使用了 Mercurial 在我部署项目的网络服务器上 我的配置文件与生产设置略有不同 问题是当我pull and update 我经常不得不merge and commit以及 这是正确的工作流程吗 似乎很奇怪 为了能
  • git 从合并中删除提交

    我有以下问题 我试图将远程分支合并到本地 然后将更改推送到存储库 好吧 我获取了具有三个提交的远程分支 但其中一个尚未完成 所以我不想推送一个这些提交到存储库 当我运行 git log 时 它向我显示以下内容 commit A1 merge
  • 如何检查Dotnet事务是否回滚?

    如何检查 dotnet 交易是否已关闭 你的标题问的是一件事 你的问题问的是另一件事 所以 我同意你的标题 如果想知道事务是否回滚或者设置为仅回滚 可以查看 transaction WasRolledBack true if transac
  • SQLAlchemy 提交 pickle 类型

    我在 sqlalchemy 中提交对 pickle 类型 列表 的更改时遇到问题 提交后它将表现得好像什么也没发生一样 这是我尝试提交的功能 def commit move game id player move game game que
  • 将提交推送到已打开拉取请求的另一个用户的分支

    我在 github 上有一个存储库 我的存储库是由另一个用户分叉的 现在他提出了拉取请求 我想将一个提交从我的一端推送到他的功能分支 他已为此提出了 PR 这可能吗 这是我所做的 git pull remote ref other user
  • git log 不显示提交,但 git log 显示编辑文件的提交

    我在寻找丢失的零钱时发现了这个奇怪的问题 我输入 git log httpd conf 我按照预期得到了一堆提交哈希 但不是我所做的 当我输入 git log 我看到了我所做的承诺 当我跑步时 git show
  • 在 Git 中:为什么经常提交是件好事? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 所以我对 Git 和 DVCS 总体来说还很陌生 而且我一直在到处读到 至少在私有分支上 一直提交总是好的 问题是 为什么 我正在使用 Sour
  • 在gerrit中使用OpenID注册失败

    这些天我正在尝试设置 gerrit 但是当涉及到使用 OpenID 注册时 总是出现一个问题 提供商不受支持 或者输入错误 我在上面看到了同样的问题OpenID 与 Gerrit 不工作 https stackoverflow com qu

随机推荐

  • Linux | LVM | 对比三种逻辑卷(Logic Volume)

    概述 为了满足在性能和冗余等方面的需求 xff0c LVM支持了下面三种Logic Volume xff1a Linear Logic Volume 线性逻辑卷Striped Logic Volume 条带化逻辑卷Mirror Logic
  • MySql ERROR 1129

    ERROR 1129 HY000 Host 39 mysql02 39 is blocked because of many connection errors unblock with 39 mysqladmin flush hosts
  • SpringBoot整合Shiro

    Apache Shiro是一个强大且易用的Java安全框架 执行身份验证 授权 密码学和会话管理 相比较Spring Security xff0c shiro有小巧 简单 易上手等的优点 所以很多框架都在使用shiro Shiro包含了三个
  • PB数据窗口对象之Button

    Button 重要属性 Action 属性 该属性是Button 控件最重要的一个属性 在数据窗口画板中 xff0c 可以选择一个按钮有哪个动作 可选的动作都是事先定义好的 xff0c 开发人员没有机会精确定义某个动作的执行 xff0c 只
  • 聊聊前端八股文?

    大家好 xff0c 我是若川 xff0c 点此加我微信进源码群 xff0c 一起学习源码 同时可以进群免费看Vue专场直播 xff0c 有尤雨溪分享 Vue3 生态现状以及展望 前些天 xff0c 我看到 剑指前端offer 一系列文章 x
  • 新手向:前端程序员必学基本技能——调试JS代码

    1前言 大家好 xff0c 我是若川 最近组织了源码共读活动 xff0c 感兴趣的可以加我微信 ruochuan12 参与 xff0c 已进行三个月了 xff0c 大家一起交流学习 xff0c 共同进步 想学源码 xff0c 极力推荐之前我
  • 全新的 Vue3 状态管理工具:Pinia

    大家好 xff0c 我是若川 最近组织了源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列 包含
  • 推荐2022前端必看的新书 《Vue.js设计与实现》

    大家好 xff0c 我是若川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • 面试官问:跨域请求如何携带cookie?

    大家好 xff0c 我是若 川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系
  • 如何写好技术文章(看张鑫旭老师的直播总结

    大家好 xff0c 我是若川 持续组织了6个月源码共读活动 xff0c 感兴趣的可以点此加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • Element使用的async-validator表单校验库源码超详细解析

    大家好 xff0c 我是若川 持续组织了8个月源码共读活动 xff0c 感兴趣的可以 点此加我微信ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体架构系列
  • 我捡到宝了!2022版前端面试上岸手册,最新最细致!

    大裁员背景下 xff0c 没什么比辞职后找不到工作更扎心 xff01 在行情好转前 xff0c 前端程序员只能 猥琐发育 xff0c 不轻易跳槽 xff0c 同时要修炼内功 xff1a 对八股文 底层源码 重点项目等进行查缺补漏 xff0c
  • 点击页面元素跳转IDE对应代码,试试这几个工具!

    大家好 xff0c 我是若川 我持续组织了近一年的源码共读活动 xff0c 感兴趣的可以 点此扫码加我微信 ruochuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整
  • 为什么说组件库的源码非常值得学习?

    大家好 xff0c 我是若川 最近来了一些新朋友 xff0c 感谢大家关注 相比于原生 JS 等源码 我们或许更应该学习正在使用的组件库的源码 xff08 如 xff1a element antd vant semi arco tdesig
  • 写一个Vue DevTools,让开发体验飞一会

    大家好 xff0c 我是若川 我持续组织了近一年的源码共读活动 xff0c 感兴趣的可以 点此扫码加我微信 lxchuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体
  • 偷偷盘点前端面试官才知道的进阶秘籍

    很多人都说35岁是程序员的职业尽头 而我们部门leader是位80年的大哥 xff0c 曾经是字节3 1大佬 xff0c 今年43岁了依然独当一面 于是 xff0c 我向他请教了 不被淘汰 的秘籍 他总结了两点 xff1a 1 努力修炼内功
  • Facebook CrypTen安全多方计算(MPC)框架介绍及核心代码分析

    简单介绍 CrypTen是Facebook在2019年10月开源的 用于多方安全计算 MPC 的框架 其底层依赖于深度学习框架PyTorch 官网说明见 xff1a https ai facebook com blog crypten a
  • 开源软件Asterisk:386变身交换机

    有关开源软件最令人激动的事情之一就是其创建超越传统的IT基础架构的应用程序的方式 一个恰当的例子是称作 Asterisk 的电话应用程序 Asterisk是一种功能非常齐全的应用程序 xff0c 提供了许多电信功能 也许它最著名的应用是当作
  • 2016.9---2017.1半年总,外派工作的感觉真爽 (补17年1月)

    16年8月份 xff0c 第二版订餐系统上线 xff0c 我就着手出去上班 xff0c 8月初提交简历后 xff0c 面试就一发不可收 xff0c 一直到12月初才出去 xff0c 历时四个月 xff0c 期间边学习边面试 xff0c 但这
  • gerrit - first commit

    最近公司有新项目 xff0c 已经让领导帮我把clone和push的权限都开通了 xff0c 但是在push的时候还是提交失败 xff0c 错误信息如下 xff1a git push origin master Counting objec