赞
踩
全称Global Information Tracker,或者 stupid content tracker,分布式版本控制系统。
Git没有中央服务器,每个协作开发者的电脑都是一个完整的版本库,工作时无需联网只需推送。Git可以记录所有的变更记录,可以方便查询和回滚历史版本。
Gerrit是建立在Git之上、基于Web的代码审查工具。
Geriit同Git免费、开源,作为网页版代码审查软件,向协助开发者提供代码审查平台,以审阅修改后的程序代码决定是否能够提交Merge,或者退回修改完善代码,从而保证代码质量。
(23条消息) Gerrit代码审核服务器搭建全过程_girret_hanpfei的博客-CSDN博客
下载链接:Git - Downloads (git-scm.com)。
根据本地机器OS版本下载相对应版本,并根据个人偏好进行Git设置。
git config --global user.name "Your Name" git config --global user.email "Your E-mail Address"
本地 Git 仓和 GitHub 仓通过SSH加密传输,因此需要配置验证信息。进入Git工作目录,邮件“Git Bash Here”打开Git终端,执行以下命令生成 SSH Key:
- ssh-keygen -t rsa -b 2048 -C "邮箱地址"
-
- 这里rsa也可以换成其他的加密算法
之后在Windows用户目录下生成.ssh文件夹。
· 登录远程Gerrit服务器,配置自己的账户信息,添加SSH key。
本地建仓,对本地当前目录进行Git初始化。
如果需要建立本地仓库track自己的代码修改,那么可以使用git init的方法建仓,然后将代码拷贝至此文件夹中。
将修改添加至暂存区。文件修改后,文件被保存在工作区,通过git add命令将文件添加至暂存区,以便于下一步commit。
- # 将指定文件放入暂存区
- $ git add <file>
-
- # 将指定目录下所有变化的文件,放入暂存区
- $ git add <directory>
-
- # 将当前目录下所有变化的文件,放入暂存区
- $ git add .
将修改提交至仓库区。修改经过git add之后被保留在暂存区,之后通过git commit进行提交。git commit使用语法:
- git commit <filename> -m "message"
- 可以指定某一个<filename>,或者不加<filename>直接提交当前所有暂存区的内容
-
- -s:添加commit签名
- -m:添加提交说明
- --amend:撤销上一次 commit,然后生成一个新的 commit
- --fixup:当前commit是以前某个commit的修正,执行git rebase后两个commit合并一个
- --no-edit:commit不改变之前commit message的内容
查看文件/分支之间的差异。
- # 查看工作区与暂存区的差异(默认为--staged)
- $ git diff <filename> --staged
-
- # 查看暂存区与仓库区(当前 commit) 的差异
- $ git diff --cached
-
- # 查看两个commit的差异
- $ git diff <commitBefore> <commitAfter>
-
- # 查看工作区与某个 commit 的差异(上一次commit:HEAD)
- $ git diff <commit>
-
- # 显示两次提交之间的差异
- $ git diff [first-branch]...[second-branch]
-
- # 查看工作区与当前分支上一次提交的差异,但是局限于test文件
- $ git diff HEAD -- ./test
-
- # 查看topic分支与master分支最新提交之间的差异
- $ git diff topic master(或者$ git diff topic..master)
-
- # 查看自从topic分支建立以后,master分支发生的变化
- $ git diff topic...master
查看commit的内容。
- # 输出某次提交的元数据和内容变化
- $ git show [commit]
-
- $ git show 12a86bc38 # By revision
- $ git show v1.0.1 # By tag
- $ git show feature132 # By branch name
- $ git show 12a86bc38^ # Parent of a commit
- $ git show 12a86bc38~2 # Grandparent of a commit
- $ git show feature132@{yesterday} # Time relative
- $ git show feature132@{2.hours.ago} # Time relative
查看提交历史。
- # 列出当前分支n条版本历史,不加-n则列出所有版本历史
- $ git log -n
-
- # 列出某个文件的版本历史,包括文件改名
- $ git log --follow [file]
克隆远程仓库到本地目录。
$ git clone 远程仓链接
获取远程仓最新内容下载到本地,不直接执行合并操作,用户决定是否合并。
- git fetch <远程主机名> <分支名>
- 如果省略分支名,那么将远程仓更新全部取回本地
相当于git fitch+git merge,获取远程仓最新内容并直接合并,这样可能会产生冲突,需要手动解决。
将本地分支推送到远程仓并合并,在本地commit完成后需要推送到远程时使用。
- git push <远程主机名> <本地分支名>:<远程分支名>
- 如省略远程分支,那么本地分支将推送到与之存在追踪关系的远程分支(通常两者同名)
- 如该远程分支不存在,则会被新建
-
- 例如:
- git push origin HEAD:refs/for/master
- origin : 远程库名
- HEAD: 指向当前本地工作分支的指针
- refs/for: 提交代码到服务器需code review才能merge
- refs/heads:直接merge,无需code review
用于分支操作。
- # 列出所有分支,-a表示本地和远程所有分支,-r表示远程所有分支,不加参数表示本地
- $ git branch [-a/-r]
-
- # 新建分支
- $ git branch 分支名
-
- # 删除分支,D表示强制删除
- $ git branch -d/D <分支名>
-
- # 分支改名
- $ git checkout -b 新名 旧名
- $ git branch -d 旧名
切换分支或者标签等。
- # 创建并切换至新分支,不加-b则直接切换
- $ git checkout -b 新分支名
--soft 、--mixed以及--hard是三个恢复等级。
- --soft:仅将头指针恢复,已经add的暂存区及工作空间的代码都不变
- --mixed:将头恢复掉,已经add的暂存区也会丢失掉,工作空间代码不变。
- --hard:一切就全都恢复了,头变,aad的暂存区消失,代码恢复到以前状态。
- # 撤销上一次commit, 不会撤销git add
- $ git reset --soft head~1
-
- # 撤销上一次commit, 同时撤销git add
- $ git reset head~
- # 彻底回退到某一个commit
- $ git reset --hard <Commit-ID>
- # 当前版本
- $ git reset --hard head
-
- # 回退到上一个版本
- $ git reset --hard HEAD^
-
- # 回退到上上一个版本
- $ git reset --hard HEAD^^
-
- # 回退到往上3个版本
- $ git reset --hard HEAD~3
-
- # 回退到往上10个版本
- $ git reset --hard HEAD~10
git clone "ssh:/用户名@远程仓IP:端口/仓库名" && scp -p -P 端口 用户名@远程仓IP:hooks/commit-msg "satool/.git/hooks/"。通过此命令获取远程仓代码下载至本地,同时将commit-msg文件拷贝至本地。
本地完成修改之后通过git add添加至暂存区,然后进行commit提交。
通过git push origin HEAD:refs/for/远程分支名,将本地修改提交至Gerrit进行审视。refs/for的意义在于提交代码到服务器之后需要经过code review才能进行merge,而refs/heads不需要,直接进行merge。
完成本地仓推送至远程后,进入Gerrit平台,添加Reviewers&CC,添加代码代码协作者进行代码审阅。
代码提交完成审阅并+2确认后,将显示Ready to Submit状态,这个时候点击Submit即可Merge合入。
问题原因:git commit提交的时候没有带上-s签名参数。
解决办法:git commit -s --amend --no-edit。
问题原因:.git/hooks目录下缺少commit-msg文件,往往是初次从远程服务器下载的时候没有通过scp命令拷贝commit-msg文件。
解决办法:scp -p -P 端口 用户名@远程仓库IP:hooks/commit-msg "本地hooks目录",先获取commit-msg文件,然后再进行ammend,git commit --amend --no-edit,那么将会附加一行Change-Id信息。
问题原因:初次获取远程仓库后默认master主分支,显示主分支源码内容。其他分支源码需本地切换到其他分支方可显示。
解决办法:git checkout -b readmmio origin/readmmio,创建并切换与远程分支对应的本地分支,之后便可以看到本地文件夹显示远程仓分支源码。
七、参考资料
1、https://blog.csdn.net/u011086209/article/details/116593218
2、https://blog.csdn.net/u010312474/article/details/107915694
3、https://git-scm.com/docs/git-init/zh_HANS-CN
4、https://www.bookstack.cn/read/git-tutorial/docs-commands-git-commit.md
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。