Gerrit上分支操作记录(创建分支、删除分支)
Git分支对于一个项目的代码管理而言,是十分重要的!许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉。
在此,我将自己的一些操作经历做一梳理,希望能帮助到有用到的朋友们。
gerrit分支操作常用的命令可以参考:http://www.cnblogs.com/kevingrace/p/5690820.html
1)首先,利用gitlab进行创建分支
登陆gitlab,创建组test,在这个组上创建工程apptest,然后让这个工程里添加内容
注意:在添加内容的使用,我们可以自定义分支名,这个分支就是我们想要创建的分支
如下截图:
这样,就创建了三个分支:master(默认),test,dev
特别注意:
后面创建的分支都是以前面当前分支为源创建的
所以新创建分支的文件都会包括前面的分支的文件,应该将和前面分支重复的文件删除!
如:
master分支下是testfile文件
test分支下是testfile文件、123文件,应该将testfile文件删除
dev分支下是testfile文件、123文件、zhonghon文件,应该将testfile文件和zhonghon文件删除
如下:
在linux客户机上操作分支,修改分支下的代码并上传到远程的git分支上
[gerrit@115~]$ git clone git@103.10.86.30:test/apptest.git
[gerrit@115~]$ git branch -av #查看当前分支情况,发现了上面在gitlab里面创建的三个分组master,dev,test
* master 1c2ecde 12 #发现当前在master分支下(*指向master)
remotes/origin/HEAD -> origin/master
remotes/origin/dev 6eae416 234
remotes/origin/master 1c2ecde 12
remotes/origin/test d5b51b9 Delete zhonghogn
[gerrit@115~]$ vim .gitrevirw
[gerrit@115~]$ vim .testr.conf
[gerrit@115~]$ git add .
[gerrit@115~]$ git commit -m “add on master"
[gerrit@115~]$ git push -u origin master #提交到master分支下,查看gitlab上apptest工程下的master分支,已经有这两个文件
接着选择一个非master的分支,如dev分支,修改里面的代码
[gerrit@115~]$ git branch dev remotes/origin/dev #先将远程gitlab上创建的分支在本地别名化
[gerrit@115~]$ git checkout dev #使用git checkout命令切换到dev分支下
Switched to branch 'dev'
[gerrit@115~]$ git branch -av #查看当前分支,发现本地有了dev分支了(上面设置过的分支别名)
* dev 6eae416 234
master 1c2ecde 12
remotes/origin/HEAD -> origin/master
remotes/origin/dev 6eae416 234
remotes/origin/master 1c2ecde 12
remotes/origin/test d5b51b9 Delete zhonghogn
[gerrit@115~]$ vim .gitrevirw #修改dev分支下的代码
[gerrit@115~]$ vim .testr.conf
[gerrit@115~]$ git add .
[gerrit@115~]$ git commit -m “add on dev"
[gerrit@115~]$ git push -u origin dev #注意,这里提交到dev分支下
Counting objects: 5, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 535 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@103.10.86.30:test/apptest.git
7a4b6e6..6eae416 dev -> dev
Branch dev set up to track remote branch dev from origin.
git push -u origin dev
Counting objects: 5, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 535 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@103.10.86.30:test/apptest.git
7a4b6e6..6eae416 dev -> dev
Branch dev set up to track remote branch dev from origin.
这样就能push到远程的remotes/origin/dev 上了,去gitlab上看看dev分支下已经有了这两个文件.gitreview和.testr.conf
如下:
其他的分支如上面gitlab里的test分支,要想弄到本地,操作和上面的dev分支操作一样
*******************************************************
线上部署了gerrit+gitlab环境(代码同步),将git代码放到上面进行维护管理了!
应开发同事要求,要在他们的项目下创建除master默认分支之外的其他分支
在gerrit上创建分支,这里我总结了下面两种情况的操作,在此做一详细记录:
(1)
第一种情况:gerrit上还没有创建项目
《gerrit上的项目最好是从gitlab上git clone --bare过来,并且项目不要为空》
思路:
先在gitlab上创建分支(上面截图),然后在linux服务器(这里选择gerrit本机)git clone下载gitlab里的项目(如上面的apptest)
最后将整个项目发布到gerrit上
关于怎么在gerrit上设置项目,大家可参考我的另一片博客,里面有详细介绍(http://www.cnblogs.com/kevingrace/p/5651447.html)
《注意,上面在新分支下添加的.gitreview文件一定要有,不然就不能使用git review命令提交代码审核了,具体上面参考的另一篇博客中有说明》
在gerrit的一个普通用户如wangshibo下操作:
如果修改apptest项目的非master分支下的代码,如上面的dev分支
用 gerrit用户在 Gerrit 上创建 test-project1 项目
要知道 review 是在 gerrit 上,而 gerrit 上现在是没有项目的,想让 gitlab 上的项目能在 gerrit 上 review 的话,必须在 gerrit 上创建相同的项目,并有相同的仓库文件.
用 gerrit用户在 Gerrit 上创建 apptest 项目
[gerrit@115]$ ssh-gerrit gerrit create-project apptest #这时候gerrit上其实已经有apptest项目了
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ssh-gerrit是别名
[gerrit@115r ~]$ cat ~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
alias ssh-gerrit='ssh -p 29418 -i ~/.ssh/id_rsa 103.10.86.30 -l gerrit'
# User specific aliases and functions
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
虽然上面创建了apptest项目,并且gerrit界面里已经有这个项目,但是个空目录
我们需要将Gitlab上的apptest项目发布到gerrit上
在此需要用到git clone –bare 命令
[gerrit@115]$ cd /home/gerrit/gerrit_site/git/ #即登陆到gerrit安装目录的git下
[gerrit@115 git]$ rm -fr apptest.git
[gerrit@115 git]$ git clone --bare git@103.10.86.30:test/apptest.git
[gerrit@115 git]$ ls
All-Projects.git All-Users.git apptest.git
[gerrit@115 git]$ cd apptest.git/
[gerrit@115 git]$ ls #即test-project1工程和gerrit里默认的All-Projects.git工程结构是一样的了
branches config description HEAD hooks info objects packed-refs refs
登陆gerrit界面,发现apptest工程已经创建了。
接着修改非master分支,比如dev分支的代码并提交到gerrit里审核
[root@115~]# su - wangshibo #切换到gerrit的用户用户wangshibo下
[wangshibo@115~]$ git branch -av #查看本地的分支结构
* master 1c2ecde 12
remotes/origin/HEAD -> origin/master
remotes/origin/dev 6eae416 234
remotes/origin/master 1c2ecde 12
remotes/origin/test d0ef218 444
[wangshibo@115~]$ git branch dev remotes/origin/dev 将远程分支本地别名化
[wangshibo@115~]$ git checkout dev # 切换到dev分支下
[wangshibo@115~]$ vim haha
[wangshibo@115~]$git add haha
[wangshibo@115~]$git commit -m "23232323"
[wangshibo@115~]$git review dev #提交代码审核的时候,注意要指定提交到分支dev上审核
然后用wangshibo用户登录gerrit,进行审核
审核通过后,通过apptest的dev分支的gitweb就能查看到提交的代码,如下:
Gerrit里面分支代码审核通过后,会自动同步到Gitlab上相应工程的分支下的
也就是说:Gerrit到Gitlab的同步策略包含所有的分支!
***************************************************************************
第二种情况:gerrit上已经创建好了项目,后续创建分支并插入到gerrit的项目里:
【gerrit上对应项目的access的refs/heads/*的“push”权限可以运行推送代码和分支到gerrit上;“Create Reference”权限运行创建分支;】
首先在gerrit界面创建分支(这里新创建分支ops),如下:
管理员帐号登陆gerrit,点击apptest项目的Branches->Create Branch (默认的initial Revision是HEAD)
刚创建后,会发现新分支和mater分支的Revision一致,HEAD指针是一致的
接着在本地git clone把代码重新克隆下来,
比如上面在gerrit里已经创建好了apptest项目,将这个项目clone到本地
[gerrit@115~ ]$ git clone ssh://gerrit@103.10.86.30:29418/apptest && scp -p -P 29418 gerrit@103.10.86.30:hooks/commit-msg apptest/.git/hooks/
[gerrit@115~ ]$ cd apptest
[gerrit@115~ apptest]$ git branch -av #查看分支情况,已经可以发现gerrit界面里创建的新分支ops
* master 486e140 Merge "123" #当前在master分支下
remotes/origin/HEAD -> origin/master
remotes/origin/dev 27a1d5c 343434
remotes/origin/master 486e140 Merge "123" #新分支刚创建时,跟当前所在分支的ID是一致的
remotes/origin/ops 486e140 Merge "123"
remotes/origin/test d0ef218 444
[gerrit@115~ apptest]$ git checkout -b ops remotes/origin/ops #将新建分支在本地别名化,并切换进去
Branch ops set up to track remote branch ops from origin.
Switched to a new branch 'ops'
[gerrit@115~ apptest]$ git branch -av 再查看,发现当前分支就是ops了
master 486e140 Merge "123"
* ops 486e140 Merge "123"
remotes/origin/HEAD -> origin/master
remotes/origin/dev 27a1d5c 343434
remotes/origin/master 486e140 Merge "123"
remotes/origin/ops 486e140 Merge "123"
remotes/origin/test d0ef218 444
千万记住一点::
新分支创建后,是和创建时的当前所在分支下的内容是一致的。
切换到新建分之以后,如果不清空当前内容,直接push上去,那该分支代码和你切换之前的分支是一样的。
所以要删除新分支里的内容,然后再push提交,提交后查看分支情况,就会发现新建分支和之前的分支的 Revision指向就不一样了,如下:
[gerrit@115~apptest]$ rm -rf ./*
[gerrit@115~ apptest]$ git add .
[gerrit@115~ apptest]$ git commit -am "222" #因为前面是直接rm删除的,所以这里commit要多加一个-a,如果是git rm删除就不用加-a
[ops 3a26276] 222
2 files changed, 0 insertions(+), 2 deletions(-)
delete mode 100644 haha
delete mode 100644 zhonghogn
[gerrit@Zabbix-server apptest]$ git push -u origin ops #这里是gerrit管理员下,所以可以直接push,普通用户就git review ops了
Counting objects: 3, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 246 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1)
remote: Processing changes: refs: 1, done
To ssh://gerrit@103.10.86.30:29418/apptest
486e140..3a26276 ops -> ops
Branch ops set up to track remote branch ops from origin.
这时候再查看分支情况,就会发现ops分支和master分支的ID不一样了
[gerrit@Zabbix-server apptest]$ git branch -av
master 486e140 Merge "123"
* ops 3a26276 222
remotes/origin/HEAD -> origin/master
remotes/origin/dev 27a1d5c 343434
remotes/origin/master 486e140 Merge "123"
remotes/origin/ops 3a26276 222
remotes/origin/test d0ef218 444
再次登录gerrit界面,就会发现Revision自然也就不一致了,ops分支下的内容和master分支下的内容也不一样了
ops分支下这个时候还是空的(上面已经清空了)
接着就可以往ops分支里创建或修改代码了,如下:
[root@115~ ]# su - wangshibo #切换到gerrit普通用户wangshibo账号下操作
[wangshibo@115~ ]$ git clone ssh://gerrit@103.10.86.30:29418/apptest && scp -p -P 29418 gerrit@103.10.86.30:hooks/commit-msg apptest/.git/hooks/
[wangshibo@115~ ]$ cd apptest/
[wangshibo@115~ ]$ git branch -av #查看分支,当前分支是master
* master 486e140 Merge "123"
remotes/origin/HEAD -> origin/master
remotes/origin/dev 27a1d5c 343434
remotes/origin/master 486e140 Merge "123"
remotes/origin/ops 3a26276 222
remotes/origin/test d0ef218 444
[wangshibo@115~ ]$ git checkout -b ops remotes/origin/ops #将远程分支本地别名化
Branch ops set up to track remote branch ops from origin.
Switched to a new branch 'ops'
[wangshibo@115~ ]$ git branch -av #发现当前分支已经是ops了
master 486e140 Merge "123"
* ops 3a26276 222
remotes/origin/HEAD -> origin/master
remotes/origin/dev 27a1d5c 343434
remotes/origin/master 486e140 Merge "123"
remotes/origin/ops 3a26276 222
remotes/origin/test d0ef218 444
[wangshibo@115~ ]$ ls #没有内容,上面已经提到,切换后就讲内容清空了
[wangshibo@115~ ]$ vim testfile #新增内容
[wangshibo@115~ ]$ git add testfile
[wangshibo@115~ ]$ git commit -m "branch test"
[ops ba9572e] branch test
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 testfile
[wangshibo@115~ ]$ git review ops #提交代码审核,提交是指定到分支ops里
Creating a git remote called "gerrit" that maps to:
ssh://wangshibo@103.10.86.30:29418/apptest.git
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote: http://103.10.86.30:80/64 branch test
remote:
To ssh://wangshibo@103.10.86.30:29418/apptest.git
* [new branch] HEAD -> refs/publish/ops
登陆gerrit,就会发现有个review的审核请求了
通过审核
这个时候,review审核已经通过了
通过apptest项目的ops分支的gitweb就能看到新增的代码了
最后,登陆Gitlab,就能发现相应项目的分支代码也都同步过来了(前提是gerrit里面做了相应的replication同步配置)!很神奇的~~~~~
*********************************************************************** ************** *********
如何删除gerrit界面上创建的分支?也可以理解在本地如何删除远程分支:
git 删除远程分支
一不小心把本地的临时分支push误提交到server上去了,想要删除。
[wangshibo@115 ~]$ git branch -av
master
remote/origin/master
remote/origin/origin/master #这个就是误提交的分支
这个时候,执行下面命令即可删除远程分支
[wangshibo@115 ~]$git push origin :origin/master
冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支。其实也是一个push推送过程,只不过是推送的空的而已!
比如下面一例,在本地误提交了一个分支到远程的gerrit上了!现在需要删除。
[wangshibo@115 GItLearn]$ git branch -av
* master 44f4b3a Add new file
remotes/origin/HEAD -> origin/master
remotes/origin/dev 44f4b3a Add new file
remotes/origin/master 44f4b3a Add new file
remotes/origin/remotes/origin/devlop dc21d7f 123 #删除这个多余的分支
[wangshibo@115 GItLearn]$ git push origin :remotes/origin/devlop
remote: Processing changes: refs: 1, done
To ssh://wangshibo@103.11.186.130:29418/GItLearn
- [deleted] remotes/origin/devlop
[wangshibo@115 GItLearn]$ git branch -av #再次查看,上面多余的分支已经删除了!
devlop dc21d7f 123
* master 44f4b3a Add new file
remotes/origin/HEAD -> origin/master
remotes/origin/dev 44f4b3a Add new file
remotes/origin/master 44f4b3a Add new file
再次登陆gerrit查看,上面多余的分支就没有了!
************************************************************************************************
如何在本地创建分支,然后上传到gerrit上?也可以理解为在本地创建分支,然后推送到远程新分支上:
命令格式如下:
#git push origin local_branch:remote_branch
注意:
这个操作,local_branch必须为你本地存在的分支,remote_branch为远程分支,如果remote_branch不存在则会自动创建分支。
只不过这个上传到远程后,分支内容是和master分支内容是一样的!
另外:
#git push origin :remote_branch
上面的local_branch留空(即冒号前面留有空格),则是删除远程remote_branch分支。(上面已经提到了!)
如下面的例子:
[wangshibo@115 GItLearn]$ git branch -av
* master 44f4b3a Add new file
remotes/origin/HEAD -> origin/master
remotes/origin/dev 44f4b3a Add new file
remotes/origin/master 44f4b3a Add new file
本地创建分支devlop,然后上传到gerrit上:
[wangshibo@115 GItLearn]$ git branch devlop #新建devlop分支
[wangshibo@115 GItLearn]$ git branch -av
devlop 44f4b3a Add new file
* master 44f4b3a Add new file
remotes/origin/HEAD -> origin/master
remotes/origin/dev 44f4b3a Add new file
remotes/origin/master 44f4b3a Add new file
[wangshibo@115 GItLearn]$ git push origin devlop:devlop #上传到远程gerrit上,gerrit上若没有devlop,则会自动创建
Total 0 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://wangshibo@103.10.86.30:29418/GItLearn
* [new branch] devlop -> devlop
[wangshibo@115 GItLearn]$ git branch -av #再次查看,发现已经上传到远程gerrit上了
devlop 44f4b3a Add new file
* master 44f4b3a Add new file
remotes/origin/HEAD -> origin/master
remotes/origin/dev 44f4b3a Add new file
remotes/origin/devlop 44f4b3a Add new file
remotes/origin/master 44f4b3a Add new file
登陆gerrit查看,发现已经有了这个分支了!【这样上传后,分支内容和master分支内容是一样的,因为在本地创建devlop分支的时候,当前分支是master】
************************************************************************************************
将远程gerrit上的代码分支迁移到本地新的gerrit分支上
迁移流程:
1.先将远程gerrit整个代码clone到本地(默认迁移过来后的当前分支是master)
2.clone到本地后,查看分支列表
3.在本地gerrit上创建同名分支
4.切换到clone下来的代码的各个分支,然后将分支内容push到本地新gerrit上的同名分支上
*******
把本地仓库提交到远程仓库的master分支中(其他分支操作一样)
git push ssh://gerrit@103.10.86.30:29418/apptest_ios.git master #或者像上面一样,将远程分支本地化,然后一步步提交
Gerrit上分支操作记录(创建分支、删除分支)的更多相关文章
- git分支管理之创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- GIT 分支管理:创建与合并分支、解决合并冲突
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- iOS——文件操作NSFileManager (创建、删除,复制,粘贴)
iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视 ...
- [原创]gerrit上分支操作记录(创建分支、删除分支)
Git分支对于一个项目的代码管理而言,是十分重要的! 许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉. 在此,我将自己的一些操作经历做一梳理,希望能帮助到 ...
- svn 命令行创建和删除 分支和tags
创建分支 svn cp -m "create branch" http://svn_server/xxx_repository/trunk http://svn_server/xx ...
- svn命令行创建和删除分支和tags
首页 分类首页 目录 原文: http://blog.csdn.net/yangzhongxuan/article/details/7519948 http://zccst.iteye.com/b ...
- git创建、删除分支
//创建分支 git branch branchname //创建并切换到新分支 git checkout -b branchname //远程分支 git push origin branchnam ...
- git 常用命令 创建查看删除分支,创建查看删除tag等
1. git 文档 https://github.com/progit/progit/blob/master/zh/02-git-basics/01-chapter2.markdown https ...
- 10月16日上午MySQL数据库基础操作(创建、删除)
以前用的是鼠标在界面上手动创建,这样创建会比较麻烦,而且还会经常出问题.在其它电脑上要用的话还需要重复操作.所以要使用程序代码操作,能通过代码的就不用手动操作. 在数据库界面选择要用的数据库,双击打开 ...
随机推荐
- MySQL参数log_bin_trust_function_creators介绍-存储过程和复制
MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...
- BOM 清除
[root@test3 11]# gcc 11.2.c11.2.c:1: 错误:程序中有游离的 ‘\357’ 8进制,相当于16进制 ef11.2.c:1: 错误:程序中有游离的 ‘\273’11.2 ...
- 高通移植mipi LCD的过程LK代码
lk部分:(实现LCD兼容) 1. 函数定位 aboot_init()来到target_display_init(): 这就是高通原生lk LCD 兼容的关键所在.至于你需要兼容多少LCD 就在whi ...
- JavaScript高级特性-实现继承的七种方式
声明和约定: 在C++和Java中,我们可以通过关键字class来声明一个类,在JavaScript中没有这个关键字,但我们知道可以通过new一个function创建对象,这个function类似C+ ...
- Navicat连接Oracle 报 ORA-12737 set CHS16GBK错误
4,680 今天看到0day5上面更新了一个用友ERP的漏洞,确实可以下载任意文件:但是用友ERP基本上都是使用了oracle数据库,必须要有一个好的数据库连接工具才可以,Navi ...
- tkinter内嵌Matplotlib系列(二)之函数曲线绘制
目录 目录 前言 (一)对matplotlib画布的封装: (二)思路分析: 1.需求说明: 2.框架的设置: 3.文件说明: (三)各文件的源代码 1.main.py 2.widget.py 3.f ...
- 使用Jenkins+gitlab自动化构建时排除分支
我们的目的是gitlab上的代码有变动时会自动向Jenkins发送web钩子请求,触发指定的动作: 但默认情况下,所有分支(如测试环境和预生产)的代码有变动时都会触发,此时可以在Jenkins的项目设 ...
- <项目需求规格说明书> - 福大易宝
福大易宝-<项目需求规格说明书> 流程 在开会时统一了项目的开发背景,具体功能,然后在同一个工作环境下进行该说明书的编写. 分工 1.李佳铭.杜宏庆共同负责引言和项目描述的内容. 2.刘双 ...
- 回文数的golang实现
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 输入: 输出: true 输入: - 输出: false 解释: 从左向右读, 为 - . 从右向左读, 为 - ...
- <20180927>新开一篇章记录常用到的IT名词
(一)有些名词在市场化的今天用的很多,和IT的名词重叠和易混淆, 有些缩写根本连外国人都很少用, 国人却用的津津乐道.这篇是专门用来记录的. 1.1 SMB , 这个在IT领域用的很多, 阐述的是 “ ...