Git笔记
(1)git的基本的概述
版本控制(Version Control Systems)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。这个系统可以自动帮我们备份文件的每一次更改,并且可以非常方便的恢复到任意的备份(版本)状态
实现版本控制的软件有很多种类,大致可以分为本地版本控制系统、集中式版本控制系统、分布式版本控制系统
分布式版本控制系统
分布式版本控制系统,则不需要中央服务器,每个协同开发者都拥有一个完整的版本库,这么一来,任何协同开发者用的服务器发生故障,事后都可以用其它协同开发者本地仓库恢复。
由于版本库在本地计算机,也便不再受网络影响了。如果要将本地的修改,推送给其它协同开发者,还需要一台共享服务器,所有开发者通过这台共享服务器同步和更新数据。如下图所示。
(2)git的工作原理
为了更好的学习Git,我们们必须了解Git管理我们文件的3种状态,分别是已提交(committed)*、已修改(modified)和已暂存(staged)*,由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。这是Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”(Index),不过一般说法还是叫暂存区域
基本的Git工作流程如下:
1、在工作目录中修改文件。
2、暂存文件,将文件的快照放入暂存区域。
3、提交文件,找到暂存区域的文件,将快照永久性存储到Git仓库目录。
(3)Git基础
(3.1)配置用户信息
配置用户的意义在于记录开发者信息,以便在版本控制记录开发者的操作行为,如lion于2016-08-24解决了一个bug。
git config–global user.name “自已的名字”
git config–global user.email “自已的邮箱地址”
git config –list查看配置信息 【而且配置的信息可以在用户的目录下面看的到】
–global 配置当前用户所有仓库
–system 配置当前计算机上所有用户的所有仓库
注:配置用户只需要执行1次,可以重复使用。
- git log可以查看修改的日志信息
(3.2)初始化仓库
- 使用git来管理代码,首先需要获得一个仓库,进入项目该目录执行git init 这样就创建了一个隐藏的.git目录
或者将一个已有的使用git进行版本控制的仓库克隆到本地
a) git init
(3.3)查看文件状态
初始化仓库后便可以进行开发了,进入到刚刚创建好并初始为仓库的目录,添加我们开发需要的文件。
通过git status可以检测当前仓库文件的状态
注:git会忽略空的目录 Untracked files是未监视的文件
(3.4)添加文件到暂存区
假设经过一段时间的开发后,需要把已开发的部分存起来,使用git add 添加到暂存区。
git add 文件名/ 文件路径“*”或-A代表所有
放到暂存区的文件被标记成了绿色,等待提交
注:颜色是工具给添加的,目的是增加可读性并不是git统一的
这里的是一个案例:可以看出来uploads是新增加的文件夹,并且没有被监视;而index.html和css文件是修改过了的;而最上面的绿色的文件是在暂存区的
(3.5)撤销更改
又经过一段时间后发现新开发的部分有Bug,想要回到之前状态,可以使用git checkout 文件名
说明index.html再次被修改了,并被标记了红色。又经过一段时间后发现新开发的部分有Bug,想要回到之前状态,可以使用git checkout 文件名。
(3.6)提交文件
经过一个相对较长阶段开发或者一个功能开发完成了,就可以提交到本地仓库了,永久保存了。
git commit -m ‘备注信息’
将暂存区被标记成绿色的文件,全部提交到本地仓库存储(并且生成了一个新版本/存盘点)。
这时git status查看状态
(3.7)查看提交历史
反反复复开发了很多的功能了,通过git log查看一下提交的历史
我们可以查看到一次次提交记录
commit 81b1e4fc2ae178caedf4575596377a80a6f1e73f
代表一次提交的唯一ID,一般称为SHA值。可以通过这个值还原到任意的一个版本/存盘点
注:按键盘q键退出。
(3.8)回复到上一次提交的状态
通过SHA值可以回到之前某一次的提交(时光倒流)
git reset –hardc888a614e072e2这样便回到了初始化仓库的状态
(4)Git分支
在我们的现实开发中,需求往往是五花八门的,同时开发个需求的情况十分常见,比如当你正在专注开发一个功能时,突然有一个紧急的BUG需要你来修复,这个时候我们当然是希望在能够保存当前任务进度,再去修改这个BUG,等这个BUG修复完成后再继续我们的任务。如何实现呢?
在Git的使用过程中一次提交称为历史记录(版本),并且会生成一个唯一的字符串,如下图
这个串可以代表某一个历史版本(实际使用只取前面几位就可以),
值得注意的是所有的提交(commit)实际上都是在分支(branch)的基础上进行的。
注意这里的箭头表明的是继承的关系,不是方向
当我们在初始化仓库的时候(实际上是产生第1次提交时),Git会默认帮我们创建了一个master的分支,并且有指针(HEAD)指到了末端。
指针(HEAD)用来标明当前处于哪个分支的哪个版本,如上图指的处于master分支的最后1个版本。
(4.1)创建分支
创建购物车的分支,并且查看已经有的分支;当前分支在哪个上其中*就在哪个上
git branch hotfix
新的分支会在当前分支原有历史版本的结点上进行创建,我称其为子分支如下图:
新建的自分支会继承父分支的所有提交历史
(4.2)切换分支
git checkout cart
我们发现HEAD现在又指向了cart的末端
在新的分支上完成购物车的功能,但是当完成了一半的时候登录分支出现了BUG,我们把当前在cart分支上的操作进行提交,然后git checkout master上进行开发修复bug,然后提交操作保存,提交之后切换到cart分支上继续的进行开发
这次的提交历史版本就会记录在hotfix这个分支上了,并且HEAD伴随hotfix在移动。
当我们切换回master后,HEAD指向了master分支的末端,并且我们观察发现我们的文件内容还是原来的“模样”。然后进行修复bug
总结:当我们git checkout branchname时,HEAD会自动指向对应分支的末端,工作目录中的源码也会随之发生改变。这个时候我们就在hotfix这个分支上修复了这个BUG,而我们原来在master分支上的操作并未受到影响
(4.3)分支的融合
git mergt master合并分支
(4.3)删除分支
git branch -d hotfix 强制的删除是D
这时用来修复BUG创建的hotfix分支已经没有用处了,我们可以将它删除。
(5)Git远程共享仓库
借助一个远程仓库,大家可以共享代码、历史版本等数据,便可以解决以上遇到的所有问题,在学习远程仓库前我们先来学习git clone path这个命令。
(5.1)创建共享仓库
Git要求共享仓库是一个以.git结尾的目录。
mkdir repo.git 创建以.git结尾目录
cd repo.git 进入这个目录
gitinit –bare
初始化一个共享仓库,也叫裸仓库 注意选项–bare
这样我们就建好了一个共享的仓库,但这时这个仓库是一个空的仓库,并且不允在这个仓库中进行任何修改
(5.2)向共享仓库共享(同步)内容
git remote 可以查看已添加的远程主机
gitremote show “主机名称”可以查看远程主机的信息
将自已开发的项目同步到这个目录中,其它开发者就可以共享你开发的项目了。
2、git
git push student@192.168.141.95:/home/student/itcast.git master
如果是先pull好了之后然后再进行开发再把东西push到远程的仓库,需要自己开一个新的分支,然后把自己的push上去git push student@192.168.141.95:/home/student/itcast.git cart
git push originhotfix:hotfix//这是个完整的写法意思就是把本地的hotfix分支放到远程的hotfix分支上
git push originhotfix:newfeature
//如果后面冒号后面的一个不写,意思就是本地的分支和远程的分支是一样的
(5.3)从共享仓库里取出内容
git pull student@192.168.141.95:/home/student/itcast.git master 之前需要提前Git init
git clone student@192.168.141.95:/home/student/itcast.git master (myprogect)后面的是我们自己起的名字
而且在clone的时候会自动的添加一个别名这个别名就叫做origin
(5,4)给远程的地址起别名
git remote add origin student@192.168.141.95:/home/student/itcast.git//其中的origin就可以代表后面的整个地址的值
(6)GitHub
远程地址特别长,我们可以给他起一个别名
git remote add origingit@github.com:Botue/repo.git
这样origin就代表 git@github.com:Botue/repo.git
当我们通过gitclone 从共享仓库获内容时,会自动帮我们添加origin到对应的仓库地址,例如:git clone git@github.com:Botue/repo.git 会自动添加origin 对应git@github.com:Botue/repo.git
将id_rsa.pub公钥的内容复制
打开gitHub的个人中心
gitLab也是一个可以通过Web界面管理仓库的网站程序,我们可以把它架设到公司自已的服务器上,实现仓库私有化,这也是大部分公司通常采用的方法,其使用方法与gitHub十分相似。
我将闲置电脑配置成了一台服务器,上面架设了gitLab程序,我们接下来的练习全部会在gitLab上进行演示。
省略很多内容…..
git checkout -b deeveloper 他健并切到developer分支