Git,Gerrit 与Github等代码托管使用经验

Github 与Gerrit

要说的话,两者都是代码托管平台,大家都能共同开发并上传同步然后merge自己的代码。两者的区别是Gerrit提供了方便的网页工具能够进行review代码,并且在开发者push时就提供了这一套区分支持。

Git

Git是所有托管平台的优秀管理工具,git有自己的很多指令,学习并实践指令是用好代码管理平台的第一步。

git init

是所有git管理的开始,此时就会创建一个git的管理分区,在里面就会有你当前的工作区,代码的版本区,代码的暂存区。

git remote add

如果你是项目的发起者,那么就需要将你的工作区与远程托管平台的版本库进行绑定,然后你就可以提交你的代码到远程平台了。
git remote add origin https://github.com/xxxxx/xx.git
此处origin则是远程的别名,以后对远程的操作都可以使用origin来代替。比如git push origin 或git fetch origin

  • tip:如果你不是项目的发起者,你直接pull gerrit或github那么上面步骤可以直接跳过

git status

可以说是非常常用的命令了,查看当前工作区的管理状态,能够显示当前的修改状态,文件的状态等,操作都是根据状态来进行的,比如如果需要cherry-pick等对本地代码更新,都需要保证工作区代码是相对远程没有改动的。

git add

开发者可以用来用这个命令创建文件并将文件添加到暂存区,比如
git add Readme.txt
或者用来将改动文件添加到暂存区
git add hello.c / git add . 分别是将hello.c文件添加或将所有改动文件添加到暂存区。

  • tip:对于开发者是直接通过创建文件方式在工作区,文件是untrack的,需要先 git add .然后才能成功提交

git checkout

上面add是添加到暂存区,那么checkout就是丢弃修改的文件
git checkout hello.c 是将hello.c文件的修改给丢弃,这个用于你一个CL修改的方面多了,需要拆分为多个commit时就很有用。

git commit

用来将改动文件保存到暂存区,并且创建commit记录,如果你的commit记录是空,那么是不允许提交的。比较常用的有两个指令
git commit -a "commit的描述"/git commit --amend 第一个是将所有改动保存并创建commit记录,第二个是对commit进行追加修改

git config

这个是提交必须做的配置,需要配置你的用户名与用户邮箱,用来表明你的开发身份。在commit中会自动记录你的信息然后生成标识。当然如果你不配置的话你也没有权限提交代码到远程。
git config user.name="xxx" / git config user.email="xxx"

  • tip:如果你已经commit了,然后修改config,是不会修改commit记录里的配置信息的,需要用户–amend去追加修改配置

git branch

对于提交到远程,这个是非常有效的,git branch -a 能够显示当前工作区属于远程哪个分支,免得新手提交错了地方。如果代码项目分支比较多一直enter到最后红色的就是当前你下载的代码的所在远程分支。

  • tip:自己本地的分支有一个默认变量有记录 HEAD

git push remote local-branch:remote-branch

对于github就比较简单了,直接push到远程分支就可以,比如git push github HEAD:master 如果远程设置了merge之前必须review那么就可以提醒项目开发者review代码。
着重说一下gerrit:在gerrit远程提供了默认解析变量 refs/for/ and refs/head/ 这两个用来区分提交到gerrit的代码是否主动需要review,前一个是需要review之后,由选定的reviewer决定是abort还是merge;后一个则是直接merge;
git push gerrit HEAD:refs/for/xxx/master
git push gerrit HEAD:refs/head/xxx/master

git stash

在本地有更改,但是又不想丢弃的情况下要cherry-pick远端的代码,那么就可以将更改保存到暂存区的栈中,然后还能够随时提取出来。首先git add . git commit -a
然后 git stash push 此时工作区就会恢复到修改之前,需要的时候可以 git stash pop

  • tip:stash是入栈操作,栈是先进后出,因此要注意你pop的是最近一次入栈的改动。

分支管理

git checkout

在多用户开发时就会涉及到branch分支问题,github的协同是是通过新开发者创建branch或fork的方式来修改后pull request的,因此管理者就需要对分支进行管理。
git checkout本是用来切换分支的,但当切换的分支有修改时也会提交修改到暂存区;创建分支则是通过协同指令 git checkout -b new_branch,没有这个分支就会创建,有的话就会提示已经存在。切换已有分支则是 git checkout master
这个功能我觉得比reset要好用那么一丢丢,你可以在不同commit版本里任意切换。

git merge

那么那么多的分支,作为管理者是需要考虑对分支进行处理的。如果删除的话可以通过 git checkout -d new_branch来删除这个分支。如果查看了分支新功能是没有问题的,可以合并到开发代码可以使用merge指令。
首先需要切换到被合并的分支中去 git checkout master
然后将要合并的分支merge到master来 git merge new_branch
然后就可以按照提交流程进行 git commit 与git push

git fetch

在分支管理中,更新拉取是最核心的。用户每次在开发前都需要保证当前本地分支与远程是保持一致的,自己的分支可以使用git pull指令来拉取远程最新的代码。但如果存在其余分支或则正在被review的代码你就需要去fetch拉取。
首先你要知道你fetch的远程地址,如同上面git remote add 使用时,为远程地址创建了别名,可以直接通过别名的方式来拉取git fetch origin。也可以不那么麻烦,直接通过远程地址拉取git fetch "远程链接地址"

git reset

对代码版本管理也是一个必要技能。用户能够通过 git reflog 查看每个commit的哈希值,复制这个哈希值就能切换分支版本。比如 git reset --hard 83b0b94
这样做的问题点在于,你如果修改后想要merge到另一个版本,就会存在冲突,冲突会在文件中使用 >>>>HEAD 表示出来,用户只能手动去删除不需要的内容然后按照提示 continue。
其实reset命令的好用点在于 --soft,你可以用来回退版本,然后git reset HEAD . 你就可以在本地对比刚刚相对于当前的修改了。

git rebase

在用户开发过程中如果多次拉取cherry-pick或多次进行commit更新,那么就会生成多个版本文件,在你进行push的时候会一次性全部更新到远程,如果你是在别人代码上开发,那这就会增加审核的复杂度。
因此你需要对你的代码版本进行管理,将本地所有commit的版本可以合成一个commit版本。使用命令 git rebase -i HEAD~N其中N代表你需要合并几个版本为一个。
在命令之后首先会弹出一个文件文件,你需要确定合并的几个版本,默认是所有的都会pick ***(head) *** 一般情况是你需要保留最顶上的版本号,然后将后面版本进行合并。你可以将后面的pick 修改为s,然后ctrl x就能跳转到你的commit信息文件。

git log

查看提交日志,能够查看各个版本的关系图 git log --graph

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Git Gerrit是一种代码审核工具,它结合了Git版本控制系统和Gerrit代码评审系统。使用Git Gerrit可以实现团队对代码的审查和管理,提高代码质量和开发效率。 在使用Git Gerrit管理代码时,首先需要配置Git用户名和电子邮件地址,确保与Gerrit上注册的信息一致。然后,可以使用命令`git clone`将项目代码克隆到本地。 为了在提交时加入change-id,可以使用以下命令将commit-msg脚本添加到Git钩子中。这是Gerrit流程所必需的。 ``` gitdir=$(git rev-parse --git-dir) scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/ ``` 在准备提交代码之前,可以使用`git add`命令将修改的文件添加到暂存区,然后使用`git commit`命令提交更改。 当准备将代码上传到Gerrit进行代码评审时,可以使用命令`git push origin HEAD:refs/for/branch_name`将本地分支的代码推送到Gerrit上进行评审。其中,branch_name是目标分支的名称。 如果你在使用Git Gerrit过程中遇到问题,可以到公众号"嵌入式linux阿财"留言交流。这本书提供了更多关于使用Git Gerrit管理代码的详细信息和指导。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [手把手教你搭建自己的git+gerrit代码评审服务器](https://blog.csdn.net/qq_41922569/article/details/121866686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [git&gerrit代码提交](https://blog.csdn.net/lanyue1/article/details/79591665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_三剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值