做为一名开发者,除了我的开发能力外,团队协做开发也必不可少。多人协做开发一个软件项目,如何管理团队开发的进度,如何控制软件版本,这些问题的解决该如何解决?那不得不说到---Gitgit
一.Git的简介github
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的安装gitlab
首先,去Git的官网https://git-scm.com/,下载Git的安装包,并打开安装包,并安装下面步骤安装ui
以上,就是Git的安装过程,在这里解释下,Git Bash其实就是Git的命令行窗口spa
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
能够看到提交的信息