目录
Git历史
Git疑解
Git特性
Git和SVN的区别
分布式工作与集中式的不同
安装Git
基本的Liunx命令
Git配置
Git基本理论(核心)
使用码云(gitee)
idea集成Git
Git分支(多人操作)
Git历史
既然接下来咱们要说Git,那就不得不说Git的起源:
Git始于一个极具纷争的大举创新的年代!
在Git还没有诞生的时候,Liunx公司一直面对一个问题,Liunx内核由于是一个规模很大的开源项目,在维护期间,对于软件只能是通过补丁和存档形式传递。后面就有了同Bitkeeper公司合作,但是由于2005年,Liunx内核社区和开发Bitkeeper的商业公司关系的破裂。迫使Liunx创建者想要自己打造一款工具,于是Liunx社区根据在使用Bitkeeper学到的教训,仅仅用了两周时间便使Git问世。
Git是开源的,最初为了辅助liunx内核所开发的!
Git疑解
有人肯定会有疑问,那Git到底有什么用?
我们在平时工作的时候,多多少少都会遇到版本冲突,同组思路不一样的情况。考虑到这些问题我们就应该想想有没有什么办法能解决,这时候就会想要一个可以统一管理版本的技术。
其他类似的技术为什么不被选择?
Git作为目前世界最先进的版本控制系统,采用分布式的形式控制版本,满足小型到大型的事务。操作简单,内存占用少,性能快
在数据方式的考虑中Git要远胜于CVS(以及Subversion和其他)从CVS..考虑,他们大多都是将信息存储基于文件的更改,也即是它们存储的信息被视为一组文件和随时间对每一个文件所做出的更改。
正如上图所表达的一样,其他版本控制系统做出的是对文件的更改!
而Git思想相反,它认为数据更像是快照,每次提交Git都会提前保存一份快照。如果文件没有做出改变,Git不会再次保存,只是会指向它已经存储好的前一个相同文件的链接!
如上图所示,数据被存储到快照中!
Git特性
Git最主要的就是版本控制,版本控制即是为了弥补行业内的各种版本迭代,以及为了更好的存储历史记录。
常见的版本控制工具:
Git
SVN (Subversion)
CVS
VSS
版本控制工具有很多,目前影响力最大的,使用最广泛的便是Git
版本控制分类
本地版本控制
记录文件每次更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用,如RCS
2. 集中版本控制 SVN
所有版本数据都保存在服务器上,协同开发者从服务器同步更新或上传文件的修改
所有的版本数据都在服务器上(或是中央处理器),用户本地只有自己以前的同步版本,在不联网的情况下就不能看到历史版本,也就不能切换到版本验证问题,而且所有版本都在同一个服务器上,有很大风险这个服务器遭到损坏,这样就会丢失所有的数据,但是他可以定期备份。代表产品:SVN、CVS、VSS
3. 分布式版本控制 Git
所有版本仓库全部同步到个人本地,这样所有人都会有历史版本存档,也可离线在本地提交,只需要联网时添加到相应服务器或其他用户。因为所有用户都拥有历史版本存档,所以,只要有一个还存有数据,就不会造成版本丢失,但是会增加本地存储空间占用。
Git和SVN的区别
SVN:
集中式版本控制系统
版本库集中放在中央服务器,用的时候从中央服务器获取,工作完成后,再放回中央服务器中
必须联网使用,对网络有要求
Git:
分布式管理控制系统
每个人都有一套完整的版本库,可以协同工作
没网情况下也可使用,联网以后做同步
Git是目前世界上最先进的分布式版本管理系统
分布式工作与集中式的不同
集中式:
集中式系统中,都是通过一个单一的工作模型。它一般是每个人通过更改中央处理的方式进行存储,所有新旧代码、版本都是放在一起的,要想不产生冲突,需要一些时间来处理这种情况。例:A开发员向中央处理发送了更改过后的代码,B开发员紧接着更改完成要想不覆盖A开发员的数据,就必须合并A开发员的数据。
分布式:
相对灵活,可以想象成每一个开发人员都是一个单独的节点,也可为中心。具体呈现方式就是每个开发人员都可以向存储库提供代码,也可以维护公共存储库,其他人也可以在这个上面继续工作。提高了开发项目组团队之间的协作能力。
安装Git
打开Git官网下载:Githttps://git-scm.com/ ,下载对应的版本即可
由于官网下载很慢所以我们就需要去找镜像下载:git-for-windows Mirrorhttp://npm.taobao.org/mirrors/git-for-windows/
安装的时候傻瓜式安装即可!
基本的Liunx命令
cd:改变目录
cd.. 回退到上一个目录,直接cd进入默认目录
pwd: 显示当前所在的目录路径
ls(ll): 都是列出当前目录中的所有文件,只是ll列出的更详细
touch: 新建一个文件,touch index.js就会在当前目录下新建一个index.js文件
rm: 删除一个文件,rm index.js会把文件删除
mkdir: 新建一个目录,就是新建一个文件夹
rm -rf: 删除一个文件夹,rm -rf src 就是删除src目录(rm -rf / 不要在liunx中尝试,意思是删除全部文件)
mv: 移动文件 (可以把一个文件移动到另一个当中,当然必须在同一个目录下)
reset: 重新初始化终端/清屏
clear: 清屏
history: 查看历史命令
help: 帮助文档
exit: 退出
Git配置
所有的配置文件,都保存在本地!
查看配置 git config -l
查看不同级别的配置文件:
#查看系统config: git config --system --list
#查看当前用户config: git config --global --list
Git相关配置文件
E:\Git\Git\etc\gitconfig : Git安装目录下的gitconfig --system 系统级
全局配置:
配置完成之后在你的目录下就可以看到你所配置的信息了(下载完Git第一次配置成功才会有这个文件)
环境变量只是为了全局使用,由于安装完成之后鼠标右键桌面就有形成,所以配置与否都可以,加上由于傻瓜式安装的时候系统也有勾选,在安装成功的时候自己就会生成环境变量!
到此安装配置完成!
Git基本理论(核心)
Git有三个工作区域,工作目录、暂存区、资源库,如果再加上远程Git仓库就可以分为四个工作区域。
Working Directory:工作区,本地存放项目代码的地方
Index/Stage:暂存区,用于临时存放你的改动,事实上就是一个文件,保存即将提交到文件列表的信息
History:仓库区(本地仓库),安全存放数据的位置,这里是你提交所有版本的数据,其中HEAD指向最新放入仓库的版本
Remote Directory:远程仓库,托管代码的服务器,可以简单的认为你项目中的另一台电脑等着远程数据交换
Git工作流程:
在工作目录中添加,修改文件 git add .
将需要进行的版本管理的文件放入暂存区域 git commit
将暂存区域的文件提交到Git仓库 git push
Git管理的文件有三种状态:已修改、已暂存、已提交
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库
1. #在当前目录新建一个Git仓库:git init
2. #克隆一个项目和它整个代码历史(版本信息):git clone [url] gitee或是GitHub(由于是外网,需要,不建议使用)上克隆一个地址
通过命令查看文件状态:
git status [文件名] //查看指定文件状态
git status //查看所有文件状态
使用码云(gitee)
1. 注册码云,完善个人信息(直接去gitee官网)
2. 需要设置本机的SSH公钥,实现免密登陆(因为码云是远程仓库,我们平时工作在本地)
声明:生成公钥前.ssh文件是空的
生成公钥之后:
生成公钥命令:ssh-keygen -t rsa
生成之后回到我们的本地ssh路径就会出现两个文件,打开带后缀名的就是公钥,复制到gitee
3. 将公钥放到gitee
确定以后就会生成公钥:
4. 随后使用码云创建一个属于自己的仓库
如果是开源要知道的是:开源可共享但是不能商用,不能转载(也就是有限制!)
私有就只能自己和仓库中成员可共享!
复制远程仓库连接克隆到本地:
idea集成Git
这个是咱们复制远程仓库到本地之后出现的路径
然后将我们远程Git文件目录拷贝到项目中即可(直接拉取远程仓库到本地项目,简单,高效!)
拉取完成之后idea会发生改变:
如图所示左侧红色就是还没上传的文件(上传成功为绿色),右上蓝色即是拉取,绿色为commit哪些文件
修改文件,使用idea操作Git命令操作:(亦或是在改动文件信息之后,使用右键Git->add也可以添加到暂存区)
上图为手动添加
add之后存储到暂存区,下面直接push提交到远程
提交测试
添加新文件之后使用命令操作即可!
在上传项目的时候,我们会觉得怎么所有文件都被上传了,有自己不想上传的文件,或是没必要上传的文件时,就可以在咱们的项目里找到一个“.gitignore”的文件,他的里面有一些规则:
*.txt //忽略所有的".txt"文件 *代表所有
! config.txt // ! 代表除此之外
/ lib // (/)相当于分隔符,(/)在前 代表要忽略文件在此目录下,但子目录中文件不忽略
lib/ // (/)在后,代表忽略的是此目录下的子目录,而不是此文件
(#) //注释
Git分支(多人操作)
咱们上面的操作都是单人执行的,由于Git是分布式管理系统所以分支是必不可少的,也是Git的特色所在。
Git分支常用命令:
git branch //列出本地分支
git branch -r //列出远程分支
git branch [branchname] //新建分支,但停留在当前分支
git checkout -b [branch] //新建分支,并切换到该分支
git merge [branch] //合并指定分支到当前分支
git branch -d [branchname] //删除分支
//删除远程分支
1. git push origin --delete [branchname]
2. git branch -dr [remote/branch]
多个分支在相互平行的环境下是可以各自很好的运行的。
如果有了交集并产生了冲突,就需要做出选择,使用谁的修改方案比较好!
master主分支必须得是稳定的,用来检测新版本,一般情况下不在其上面工作,我们需要先在分支上工作完善之后,再合并到主分支
因为Git分支是非常轻量的!所以在操作的时候也是即时的,因为有这个特性才更好的说明分布式管理的好处。在这里就不多介绍分支了,如果有感兴趣的,或是想要了解更多关于Git的朋友点击Git - Branches in a Nutshell官网观看研究!