作为一名开发者,除了个人开发能力外,团队协作开发也必不可少。多人协作开发一个软件项目,如何管理团队开发的进度,如何控制软件版本,这些问题的解决该如何解决?那不得不说到---Git
一.Git的简介
Git是一个版本管理工具,它有协同修改、数据备份、版本管理、权限控制、历史记录、分支管理等功能。
协同修改:多人并行不悖的修改服务器端的同一个文件。
数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理:在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
权限控制:对团队中参与开发的人员进行权限控制。除此之外,可以对团队外开发者贡献的代码进行审核,这是git独有的一个功能
历史记录;查看修改人、修改时间、修改内容、日志信息,将本地文件恢复到某一个历史状态,不得不说这个功能太赞了,后面会讲到如何在IDE中使用这个功能。
分支管理:允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
Git是由Linux之父---Linus用C语言开发了一个分布式版本控制系统,并将Linux也放到上面托管。
Git的官网:https://git-scm.com/,因为Git是由Linus开发的,因此Git的命令与Linux命令全面兼容,这也是Git的一大优势
二.Git的基础知识
说了这么多的理论,下面结合Git的实际操作来进一步感受Git的魅力吧
1.Git的安装
首先,去Git的官网https://git-scm.com/,下载Git的安装包,并打开安装包,并安装下面步骤安装
以上,就是Git的安装过程,在这里解释下,Git Bash其实就是Git的命令行窗口
2.Git的结构
如上图所示,Git分为四个部分,工作区、暂存区、本地库、远程库,这四个部分都可以用来存储数据
从工作区到远程库
平时写代码是在工作区(IDE环境下),写完后可以添加到暂存区,暂存区起到了一个临时存储的作用,然后提交到本地库,本地库的代码就会发生变化,最后推送到远程库,经过这一系列的操作后,远程库的代码和工作区的代码就保持一致的
从远程库到本地库
我们的代码一般托管在远程库里,经常需要进行的操作就是从远程库克隆代码到本地库,然后将本地库的代码导入到IDE环境的工作区
那么,平时经常听到github、gitlab和这些有什么联系呢?
其实,github和gitlab都是代码托管中心,它们的作用是维护远程库
github是处于外网环境下,在它上面创建的远程库是公开的,私密性不好,创建私有的远程库是需要付费的。因此,有些公司会在局域网的环境下免费搭建gitlab,可以保证远程库的私有性
从上面可以看出本地库与远程库进行交互,是在Git常见的操作,下面介绍Git的本地库与远程库交互的方式
3.本地库和远程库的交互方式
本地库和远程库的交互方式分为团队内部协作、 跨团队协作
3.1团队内部协作
上面介绍了团队中的成员进行协同开发时,使用进行版本控制的过程,下面举一个场景来说明整个过程
假如小黑、小白现在要协同开发一个新项目,小黑在代码托管中心创建一个远程库,在本地的工作区写好代码,提交到本地库并push到远程库中,这时小白要在小黑开发的基础上继续开发,就会先将远程库的内容clone到自己的本地库,然后在本地修改好了后,提交到自己的本地库,并push到小黑的远程库,但这个过程需要小黑邀请小白加入团队
3.2跨团队协作
还是以一个场景来说明
岳不群给令狐冲分配了一个开发任务,令狐冲觉得自己做不了,便找东方不败来帮忙。东方不败便将岳不群的远程库fork(复制)到自己的远程库,然后clone到自己的本地库进行修改,修改完后,push到自己的远程库。接下来,东方不败发起pull request,岳不群看到这个请求后,进行审核,审核通过后,便将东方不败的远程库merge(合并)到自己的远程库
好了,说了这么这么多,来实际操作下Git吧,Git的实际操作分为两部分--Git的命令行操作和Git的图形化操作(以Eclipse为例操作),在顺序上先介绍Git的命令行操作,这样有助于理解在图形化界面操作Git背后发生了什么
三.Git的命令行操作
Git的操作分为本地库操作和远程库操作,先说本地库操作
3.1本地库操作
安装好Gith后,如下图点击进入Git的命令行窗口
这里介绍Git的几个常用命令
3.1.1 本地库初始化
命令:git init
Git的命令与linxu命令兼容,这里我们进入D盘目录下创建一个TestGit的目录,并作为本地库初始化
在初始化的同时,也创建一个主分支,分支的概念后面再介绍
那么,初始化本地库有什么效果呢?
可以看到再本地库目录里多了.git目录
进入.gti目录,可以看到里面存放了git的相关配置文件
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡
乱修改。
3.1.2设置签名
为什么需要签名呢?
在开发中,可能有多个人对远程库的内容进行修改,为了标识每一次修改是由谁产生的,故需要设置签名
如:
用户名:tom
Email 地址:123456789@qq.com(这个Email起到标识身份的作用,并不会实际地发邮件)
作用:区分不同开发人员的身份
签名分为项目级别/仓库级别和系统用户级别
项目级别/仓库级别仅在当前本地库范围内有效,系统用户级别在登录当前操作系统的用户范围有效
设置项目级别/仓库级别签名
命令:git config user.name 用户名
git config user.email 邮箱
进入本地库所在的目录执行命令
那么,在哪里保存签名信息呢?———在./.git/config 文件
设置项目级别/仓库级别签名的命令:
git config --global user.name tom_glb
git config --global user.email goodMorning_pro@atguigu.com
信息保存位置:~/.gitconfig 文件
两者的级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别
的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许没有,否则push到远程仓库会出错
3.1.3常见操作
a.a.状态查看
git status
查看工作区、暂存区状态
b.添加
git add [file name]
将工作区的“新建/修改的文件”添加到暂存区
c.提交
git commit -m "commit message" [file name]
将暂存区的内容提交到本地库,-m后面内容是此次操作地标识信息(日志信息),放在被提交地文件中
操作演示:
d.查看(本地库)历史记录
git log
可以看到提交的信息
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。