可以看到此时已经创建好了一个远程仓库,仓库下会有两个默认的README文件,一个是中文版另一个是英文版,是用来介绍你这个仓库是用来干什么的。
将仓库设置为开源。
直接使用git clone https://...
将仓库克隆到本地。
SSH协议使用了公钥加密和公钥登录机制,体现了实用性和安全性,使用此协议的时候需要将我们的公钥放在服务器上,由Git服务器进行管理。使用HTTPS协议没有要求,直接就能克隆到本地。
直接使用SSH协议克隆远程仓库到本地是不行的。所以要遵循以下步骤:
在用户目录下创建.ssh目录(如果存在就不用创建,并且如果有id_rsa 和 id_rsa.pub 两个文件可以直接跳过下一步,将 id_rsa.pub 中的内容添加到Git服务器上即可),生成SSH密钥对。
ssh-keygen -t rsa -C "git服务器绑定的邮箱"
生成密钥对(一路回车就可以)。
当我们把远程仓库克隆到本地后,Git会将远程仓库的master分支和本地仓库的master分支对应起来,远程仓库的名称默认是origin(使用git remote 查看
)。
或者使用git remote -v查看更详细的信息
例如:创建一个文件,然后同步到远程仓库。
在推送到远程仓库之前一定要配置一下本地仓库的user.name 和 user.email 保持与远程仓库一致。
git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名>
例如:在远程仓库进行一次修改,然后同步到本地仓库(这是为了实验,不要在远程仓库做修改)。
git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>
如果创建仓库时没有勾选.gitignore文件,可以自己创建。写在.gitignore文件中的文件,会被git忽略掉。
例如:忽略掉 .i 和 .o为结尾的文件:
在工作区创建以.i和.o为结尾的文件,使用git status查看仓库的状态。
可以看到这两个文件确实被git忽略掉了,证明.gitignore文件已经生效了。
特殊情况:
git add filename -f
强制添加git check-ignore -v
进行检查.* #表示忽略掉所有以.开头的文件
!.gitignore #表示不忽略.gitignore文件
git config [--global] alias.别名 原本名称
例如,给status起别名为st,这样以后查看仓库状态就可以使用git st了。
该功能作用就是,当某个人发现代码存在bug时,可以创建一个Issues来告诉仓库的人员代码存在bug,让他们进行修复。
对于仓库人员,修复完问题后可以将此Issues的状态进行修改。
在实际的开发中,开发者都是在dev分支上进行开发,然后再合并到master分支上的,但是并不是随意就能合并到master分支上的,要在合并之前给仓库的管理员提交合并分支的申请,在申请得到同意后才能够进行合并。这个Pull Requests就是提交申请用的。
标签就相当于对某一次commit起一个别名,其作用有:
创建标签
git tag v1.0
默认是给最后一次提交打上v1.0的标签git tag v0.5 commit id
指定某次提交打一个标签git tag -a v0.6 -m"" commit id
可以在打标签的时候写一些备注信息git show 标签名
来查看标签的详细信息git tag
在本地删除标签
在远程仓库也是有标签的,所以我们可以将本地仓库的标签提交的远程仓库中。
推送标签
git push origin v1.0
将此标签推送到远程仓库git push origin --tags
将本地所有标签推送到远程仓库git push origin :v1.0
将本地删除的v1.0标签推送的远程仓库 git tag -d v1.0
两个开发人员A和B同时开发一个文件file.txt,A在文件中写入aaa的内容,B在文件中写入bbb的内容,最终推送到远程的master分支上。
在这里就用Windows端和Linux端替代两个开发人员。
首先,在Windows端先将仓库克隆到本地。
将Windows端的开发人员给予仓库的提交权限。
开发一个新的文件肯定是不能在master分支上进行开发的,所以要先创建一个dev分支。
开发人员A使用git pull
拉取仓库信息。
git branch -r
查看远程的分支
开发人员A在本地创建dev分支,并与远程的dev分支建立链接关系git checkout -b dev origin/dev
(建立链接关系后可以直接使用git pull 或者 git push 进行分支上数据的拉取与推送)。
git branch -vv
查看本地分支与远程分支的链接关系。
对于开发者B也要在本地创建dev分支,并且和远端的dev分支建立链接关系。
开发人员B也在file文件下开发,开发完后推送到远程的dev分支。
可以看到在开发人员B提交自己开发的代码时候,push会报错。这是因为此时B人员的本地仓库中dev分支已经不是最新状态了,要先
git pull
拉取最新的分支信息。
git pull 后提示出现冲突,所以要手动的修改这个冲突。
开发人员B解决完冲突后,重新推送。
在远程仓库的dev分支下已经达到了想要的成果。
最后还要将dev分支合并到master分支上,可以选择走pull requests,也可以在本地先完成合并再推送到远端上,最终再删除dev分支。下面展示让开发人员A在本地合并好后在推送到远程仓库。
git pull
拉取最新的dev分支信息。开发人员A和B共同开发一个项目,A负责funcA功能,B负责funcB功能,这个场景中与上个场景不同之处在于针对每个功能都创建一个独立的分支去完成,不是在一个dev分支下完成开发的。
开发人员A在本地创建一个分支feature-A分支,进行开发。
由于在推送到远程仓库时,远程仓库中并没有feature-A分支,更没有与本地的feature-A分支建立链接关系,所以直接使用git push是不可以的,要使用git push origin feature-A,这样在远程仓库中会自动创建feature-A分支
开发人员B也在本地创建一个分支feature-B分支,进行开发。
但是B突发情况,有一些急事要去处理,所以他先将完成的这部分代码推送到远程。
此时B的工作交给A来继续开发,所以A要先pull拉取feature-B分支,然后再继续在B的基础上开发func2。
在本地创建feature-B分支,并与远程的feature-B分支建立起链接关系。
git branch --set-upstream-to=origin/feature-B feature-B
建立链接关系。
git pull
拉取feature-B分支的最新状态。
在A的帮助下又开发了三分之一,此时B又回到岗位继续开发了。所以A要将最新的状态提交到远程。
开发人员B需要从远程仓库拉取feature-B分支的最新状态,继续开发,完成后推送到远程仓库。
此时在远程仓库的featrue-A分支和feature-B分支已经达到了预想的效果。
将两个分支合并到master分支上。
先将最新的master分支状态拉取到本地
将master分支合并到feature-B分支上
将feature-B分支合并到master分支,采用提PR的方式
完成合并后删除没用的分支
解决在远程仓库删除分支后,在本地使用git branch -r
还能查看到已经删除的分支。
使用命令 git remote show origin
,可以查看remote地址,远程分⽀,还有本地分⽀与之相对应关系等信息。
git remote prune origin
移除已经删除的分支还能在本地显示。
在实际的项目开发中主要会经历三个重要的阶段:开发阶段
测试阶段
运维阶段
,开发阶段主要涉及项目的规划,写代码,构建等工作,测试阶段主要涉及项目的测试工作,运维阶段主要涉及项目的发布,部署,维护工作。针对不同的阶段,都会有与之匹配的工作环境。
系统的开发环境:
一般来说,针对上面不同的环境来设计不同的分支,例如:
分支 | 名称 | 适用环境 |
---|---|---|
master | 主分支 | 生产环境 |
release | 预发布分支 | 预发布/测试环境 |
develop | 开发分支 | 开发环境 |
feature | 需求开发分支 | 本地 |
hotfix | 紧急修复分支 | 本地 |
master分支
develop分支
feature分支
release分支
hotfix分支
Gitee企业版免费版
要使用上面的那种分支模型,选择生产/开发分支其他的分支后续创建即可,因为如果选择了开发/发布/缺陷分离模型的话默认提供了feature等分支,但是通常来说是需要多个feature分支的,如果采用这种模型的话是不能再去创建feature分支的,所以选择生产/开发模型即可。
模拟开发流程。
在file文件下进行开发,增加一个需求。
首先,要从develop分支的基础上创建处一个feature分支,完成需求后将feature分支合并到develop分支,删除feature分支。
在develop分支的基础上创建一个release分支,测试人员在此分支上进行测试工作。
测试完毕后将release分支合并到master分支进行上线。