以下内容纯属个人扯淡,仅供参考:
目录
一、GitBash
1、常用命令
1、新建代码库
git init | 在当前目录新建一个git代码库 | |
git init [项目名称] | 在当前目录下新建一个目录(名称=项目名),并将其初始化为git代码库 | |
git clone [url] | 下载一个项目和它的整个代码历史 |
2、配置
config --list | 在当前目录新建一个git代码库 | |
config -e [--global] | 在当前目录下新建一个目录(名称=项目名),并将其初始化为git代码库 | |
git clone [url] | 下载一个项目和它的整个代码历史 |
参考资料:
廖雪峰-Git教程 :建议先看完这个
以一个项目时间轴来分析
注意:本文的分析都是建立在理想中的规范而已(理想情况下项目组每个成员都十分熟悉Git和相关操作,并对规范熟稔于心),是出于方便管理、防止出错的一种协同建议,并不是非这样做不可。不同公司团队成员的技术栈不同,会根据实际情况调整。例如:
1、合并代码到master分支应由项目经理来操作。但由于他可以不懂Git,实际很可能是交给运维、开发来完成
2、release分支是预发布分支,应在测试阶段时,由测试人员从develop分支上建立,但实际可能由开发代劳
3、master、feature、release等等很多分支,可能项目中只有1-2个人时,就不需要这么麻烦
4、有些公司要求合并代码到Developer,发布测试版规定由测试人员完成。这种情况下会在远程仓库中为每个开发单独建立一个远程分支,他只管向自己分支提交即可,而由测试去合并代码
。。。等等。。。
2、含义
remote:远程、远程仓库
local:本地、本地仓库
1、初始版本
情景再现:公司/团队要开发一个新的项目/产品XxxProject,因此各部门抽取一些人员组建成一个新的项目团队,项目成员除了项目经理、产品经理等,还有开发人员:开A、开B,测试人员:小测,运维人员:大运。立项、需求和设计这两个阶段都完成了后,现在进入开发阶段了
1、远程分支
项目经理在企业GitLab上:建立XxxProject项目仓库并初始化一次提交,默认会有一个master分支;创建develop、release分支;将develop设置为默认分支(原本默认是master)。
此时remote上有1个提交,3个分支。如下:
1、1个提交:对应1个快照,也对应1个对象;
2、xxx是commitId,每个提交会有一个唯一对应commitId值与之对应;
3、分支就像引用,提交/快照就像对象
4、HEAD只指向某个分支,表示当前所在分支。
以Java的角度理解:当前远程仓库里只有1个对象,然后创建了4个引用:master、develop、release引用都指向该对象,而HEAD指向develop分支
2、项目成员
项目经理在GitLab上把相关成员的添加到项目中,并指定为不同的角色(不同角色拥有不同权限。Git 权限控制)
Owner一般是Git服务器管理员,一般与项目无关;
Maintainer是项目创建者,在这里就是项目经理。他有权推送代码到+甚至删除protected branches-受保护分支。
Developer是开发者,在这里就是开A、开B,他们有权推送代码到+甚至删除non-protected branches-非受保护分支
3、项目克隆
开A、开B从remote克隆到本地,命令:
git clone (url)
1、这里没有添加任何参数。(有可选的参数:git clone几种可选参数的使用与区别),因此相当于将整个XxxProject仓库及里面的快照对象、分支引用全都复制一份下来到本地仓库中
2、该命令实际完成了:在本地创建一个XxxProject本地仓库local/XxxProject;将local/XxxProject与remote/XxxProject关联起来;由于remote/HEAD是指向remote/develop,因此会在本地创建一个分支local/develop与remote/develop关联起来,并将local/HEAD指向local/develop。此时为了区分remote和local的分支引用,会在所有remote分支名前加上origin以辨别,命令:
##查看所有分支
git branch -a
##结果
* develop
remotes/origin/HEAD -> origin/develop
remotes/origin/release
remotes/origin/develop
remotes/origin/master
上述结果表达的含义,从上到下依次:本地有local/develop分支,且local/HEAD指向它;远程有release、develop、master共3个分支,且remote/HEAD指向remote/develop。总结git clone所完成的事情
1、建立local/XxxProject仓库,与remote/XxxProject关联起来
2、复制remote/XxxProject上所有的提交对象和分支引用等所有信息,到local/XxxProject中
3、在local建立local/develop分支,将该分支与remote/develop分支关联起来
4、local/HEAD指向local/develop
3、Git是分布式的,意味着每个人本地仓库实际上就是一个相对独立的版本系统。实际工作中大部分的命令都是在本地仓库中完成的。本地不能直接操作orgin/x这些分支
因此:在我们执行git push之前,和remote相关的东西都不会发生任何改变,为了节约篇幅、突显重点,到后面我们要执行git push命令时再画出所有情况,现在开A、开B手上只有:本地仓库、本地分支develop
4、项目开发