文章目录
- 前言
- 一.远程仓库的概念
- 二.远程仓库的操作
- 2.1新建远程仓库
- 2.2 克隆远程仓库
- 2.3 向远程仓库推送
- 2.4 拉取远程仓库
- 2.5 忽略特殊⽂件
- 2.6 标签管理
- 三.Git实战场景
- 3.1 Git多人实战场景一
- 准备工作
- 由开发者1和开发者2新增加文件内容。
- 将dev的文件合并到master上
- 总结
- 3.2 Git多人实战场景二
- 3.3Git 实战场景三
- 四.总结
前言
目标: 掌握 Git 远程仓库与本地仓库,结合版本管理与分⽀管理,做到基于分⽀级的个人级开发
一.远程仓库的概念
我们现来看看Git对远程仓库的解释
我简单的总结一句:远程仓库是指托管在因特网或其他网络中的 Git 仓库。
二.远程仓库的操作
2.1新建远程仓库
进如gitte网站,点击右上角加号,新建仓库。
之后就会出现这个界面,大家输入相应的仓库名称和路径,就可以点击创建操作了
创建成功如下:
创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有
2.2 克隆远程仓库
克隆/下载远端仓库到本地,需要使⽤ git clone 命令,后面跟上我们的远端仓库的链接,远端仓库的链接可以从仓库中找到:选择“克隆/下载”获取远程仓库链接:
SSH 协议和 HTTPS 协议是 Git 最常使⽤的两种数据传输协议。SSH 协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性,使⽤此协议需要将我们的公钥放上服务器,由 Git 服务器进⾏管理。使⽤ HTTPS ⽅式时,没有要求,可以直接克隆下来。我下面介绍这两种方式:
在克隆操作执行之前,我们要配置仓库的username和email
HTTPS方式:
SSH方式
使⽤ SSH ⽅式克隆仓库,需要我们多设置一步,必须添加公钥到远端库中,然后我们才才能进行克隆:
**第⼀步:**创建SSH Key。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有
id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建SSH Key:
使用这个命令,建立公钥
ssh-keygen -t rsa -C "@qq.com" 邮箱使用自己的邮箱
**第⼆步:**添加⾃⼰的公钥到远端仓库。
我们先查看公钥,复制到中央仓库的公钥中
进入设置
点击SSH公钥设置
点击 ssh公钥 选项,进⾏设置:
点击确认后,我们的克隆工作都完成了,现在可以开始克隆了。
这样我们就克隆成功了,如果有多个⼈协作开发,GitHub/Gitee 允许添加多个公钥,只要把每个⼈的电脑上的Key 都添加到 GitHub/Gitee,就可以在每台电脑上往 GitHub/Gitee 上提交推送了。
2.3 向远程仓库推送
这时候我们就可以看一下如何推送到远程仓库中
我们一般推送到远程仓库的命令如下:
git push <远程主机名> <本地分⽀名>:<远程分⽀名>
如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
我们现在本地修改文件并且提交。
开始推送操作。
开始推送操作的同时,我们现来介绍一下怎么查看远程仓库地址
开始推送操作
这时候代码已经被推送到远端了
2.4 拉取远程仓库
我们现来看看如何拉取远程仓库的命令
git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>
先修改远端仓库的文件的内容
然后在本地端拉取文件内容
2.5 忽略特殊⽂件
在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让 Git 知道呢?在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git 就会⾃动忽略这些⽂件了。
这个操作,在我们创建仓库的时候就可以选择忽略哪些文件
如果当时没有选择这个选择,在⼯作区创建⼀个也是可以的。⽆论哪种⽅式,最终都可以得到⼀个完整的 .gitignore ⽂件,例如我们想忽略以 .so 和 .ini 结尾所有⽂件, .gitignore 的内容如下:
这里面.*的内容是需要忽略的东西
忽略可执行文件:
*.swf:Flash 文件。
*.air:AIR 文件。
*.ipa:iOS 应用程序包。
*.apk:Android 应用程序包
我们之后就创建这个文件,把约束条件加入进去
接着我们就来验证⼀下.gitignore⽂件的能力,在⼯作区新增两个⽂件 a.air b.air
显然我们的配置生效了,这两个文件并没有加入工作区。
2.6 标签管理
标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项⽬发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识⾥程碑的意义。
这有什么⽤呢?相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag ⼀定要给⼀个让⼈容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使⽤标签就能很快定位到。
gitte上面的标签就是这个。
我们开始创建标签
敲命令 git tag [name] 就可以打⼀个新标签
创建了标签,怎么指定标签呢?
1.查看提交历史
2.根据历史版本,对不同的历史版本打上标签
使用命令
git log --pretty=oneline --abbrev-commit
我们指定了标签之后,我们可以操作标签了
1.查看标签信息
git show [标签号]
2.推送标签
git push origin v0.9
3.删除标签
删除标签的命令是
git tag -d v0.9
删除之后我们还要提交
git push origin --tags 如果有多个标签,这里可以一键提交
三.Git实战场景
我们前面学习了git的基础管理和分支管理,现在又逐步学习了git的远程仓库操作。接下来我们就要模拟实际的场景场景,去整合我们前面学习过的知识。
3.1 Git多人实战场景一
开发者 1 和开发者 2 都从中央仓库克隆了一份代码,并创建了一个 dev 分支。开发者 1 在 dev 分支上开发了一些新功能,并推送到远程仓库。开发者 2 也在 dev 分支上开发了一些新功能,并推送到远程仓库。
场景:我们在master分支下 file.txt文件新增代码 “aaa”、“bbb”.
实现:由开发者1新增"aaa",由开发者2新增"bbb"
条件:在一个分支下协作完成。
这里的在一个分支上协作完成的意思是指多个开发者在同一个分支上进行开发,然后将修改合并到主分支。
如果还没理解我们这个场景,我来画个图大家理解一些就是了
知道大概的操作,需要干什么事情之后,我们就开始着手上手做
具体的步骤如下:
1.在服务器和本地电脑上克隆中央仓库。
2.在远程仓库创建 dev 分支,并在本地克隆。
3.开发者 1 在 dev 分支上开发,并推送到远程仓库。
4.开发者 2 在 dev 分支上开发,并推送到远程仓库。
5.开发者 1 将 dev 分支的修改合并到 master 分支。
6.开发者 1 将 master 分支的修改推送到远程仓库。
7.删除中央仓库的 dev 分支。
准备工作
1. 在服务器克隆中央仓库和在本地电脑上克隆中央仓库
服务器
本地
按住shift打开powershell窗口,开始克隆操作
本地已经克隆成功了。
2. 我们在远程仓库创建一个dev分支,然后我们其他开发这空间要拉取操作。
点击maste然后点击管理这个词条,新建分支即可
在两台计算机上做拉取分支操作。
查看分支的命令有两个
git branch -r 命令用于列出远程仓库中的所有分支。
gitbranch -a 命令用于列出本地仓库中的所有分支,包括远程分支
服务器
本地计算机
最后完成以后,状态图如下:
由开发者1和开发者2新增加文件内容。
开发者1:
做的工作就是
创建一个dev分支和远程仓库的dev分支相关联,然后对file1,进行操作,并推送到远程仓库中。
远程仓库的分支:
开发者2:
修改文件
提交文件到版本库和暂存区
最后推送到远程仓库
这里为什么会出现问题了,是因为我们开发者1之前已经对中央仓库进行了修改,这时候开发者2再次提交,中央仓库并没有这么智能,识别是增加追加文件还是覆盖文件,这一切需要你手动去更改。接下来我们就开始做吧。
1.先拉取远程仓库的操作
2.更改默认冲突
3.修改保存后提交并推送到中央仓库。
4.查看中央仓库的内容
现在的状态图如下:
将dev的文件合并到master上
其实git合并分支有两种方式,一种是PR申请单操作,另外一种是本地合并操作
PR申请单操作
PR 申请单(Pull Request)是一种在多人协作开发中,将本地分支的修改合并到主分支的常用方式。
具体在gitte上的操作界面如下
这里我们针对申请单的合并操作不做过多赘述,我们还是针对本地合并操作多做出一些解释
本地合并操作
本地修改的合并操作
具体步骤如下:
1.切换到主分支。
2.使用 git merge 命令将本地分支的修改合并到主分支。
具体示意图如下:
开发者1
1.先保证dev下的文件是最新的。
2.切换到master节点,保证master仓库是新的
3.切换回dev对master进行合并操作
4.切换master对dev进行合并操作,并推送到中央仓库。(这里的合并是为了避免冲突)
查看中央仓库
最后删除中央仓库的dev分支。
总结
在同一分支下进行多人协作的工作模式通常是这样:
- 首先,可以试图用 git push origin branch-name 推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
- 功能开发完毕,将分支 merge 进 master,最后删除分支。
3.2 Git多人实战场景二
目标:远程master分支下新增function和function2文件
实现:由开发者1新增function1,由开发者2新增function2
条件:在不同分支下协作完成(意思是各自让某一个功能私有某一个分支)
现在我们可以开始操作了
针对开发者1的操作
针对开发者2的操作
最后看效果
此时,在本地,你看不见他新建的文档,他看不见你新建的文档。并且推送各自的分支时,并没有任何冲突,你俩互不影响,用起来很舒服!!
状态变化图如下:
3.3Git 实战场景三
但天有不测风云,你的小伙伴突然生病了,但需求还没开发完,需要你帮他继续开发,于是他便把feature-2分支名告诉你了。这时你就需要在自己的机器上切换到 feature-2 分支帮忙继续开发,要做的操作如下:
首先分支2已经挂掉了,我们要在分支1的下面继续做分支2的工作。
1.首先拉取远程仓库
2.与远程仓库建立联系
3.修改文件并且推送
查看远程仓库
这时,你的⼩伙伴已经修养的差不多,可以继续进⾏⾃⼰的开发⼯作,那么他⾸先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在⾃⼰的电脑上看看。具体的操作如下:
最后各⾃功能开发完毕后,不要忘记我们需要将代码合并到master中才算真正意义上的开发完毕。
我这里会用到我们申请单的方式进行合并
1.先新建申请单
2.填写申请单提交
3.审查人员审查
最后完成合并
开发者2的合并操作完成了,轮到开发者1了。
开发者1在本地上操作。
1.首先在本地master节点拉取远程仓库master
2.在本地feature-1节点合并本地节点master
3.合并完成后推送到远程仓库节点的feature-1节点。
4.最后在远程仓库用申请单的方式合并即可
5.合并完成之后,删除两个节点
填写申请单
审核申请单
合并分支
查看合并结果
这个场景的状态变化图如下:
另外我们还要解决一个问题,远程分支删除后,本地 git branch -a 依然能看到远程分支的解决办法。
使用git remote show origin 查看远程分支的关联
使用 git remote prune origin
四.总结
Git的操作到这里就告一段落了。基本的Git操作的介绍都介绍的差不多了,接下来就需要我们自己去探索知识的海洋了,愿各位大佬逐一指点我的错误,与可爱的你们一起进步!!!!!