一、Git简介
Git是开源、分布式的版本控制工具,或是一个源代码管理工具。每个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络和中心服务器。
1)关于版本控制
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
2)Git内文件的三种状态
对于任何一个文件,在Git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。
已修改表示修改了某个文件,但还没有提交保存;
已暂存表示把已修改的文件放在下次提交时要保存的清单中;
已提交表示该文件已经被安全地保存在本地数据库中了;
Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库
工作目录 :写代码的地方,有增删改的地方都是在工作目录中发生的
暂存区: 暂存区就是用来临时存储代码的区域,将来可以提交到本地仓库也可以撤销回来
本地库:本地库就是存储的历史版本,通过 git push 命令来将本地库的文件推送到服务器,每个项目都有一个 Git 目录(注:如果 git clone 出来的话,就是其中 .git 的目录;如果git clone --bare 的话,新建的目录本身就是 Git 目录。)
3)工作流程
1.在工作目录中修改某些文件
2.对修改后的文件进行快照,保存到暂存区域
3.提交更新,将保存在暂存区域的文件快照永久转储到 git 目录中
二、搭建 GIT 服务器
环境拓扑:
主机 | IP | 角色 | 软件 |
git-server | 192.168.1.110 | server | git |
192.168.1.120 | Client | git |
1)软件安装
安装有两种方法:
1.yum命令安装,此方法简单,并且会自动安装依赖的包,而且会从源里安装最新的版本,不过不一定是git最新的。
2.源码安装,这个要比yum方式较麻烦点,不过过程还是比较清晰的。
采用 yum 方式安装 git :
所有主机安装 git
[root@git-server ~]# yum -y install git
[root@localhost ~]# yum -y install git
需要ssh的支持。某些版本服务器需要安装git-core才是服务器
查看git 版本
git --version
三、git使用
1)服务端用户创建空仓库(git-server)
创建 git 账号
useradd git
passwd git
创建版本库
版本库又称仓库。可简单理解为一个目录,目录里所有文件都可以被 git 管理,每个文件的修改、删除,Git都能跟踪,在某个时刻可以 还原。
基本思路: 先创建一个空目录,如目录 project.git作为仓库的存放位置。运行”git init”把这个目录变成Git可以管理的仓库,当前目录下多了.git文件夹(默认隐藏)
切换到 git 账号,创建一个项目的仓库 project.git
su - git #切换到 git 用户
mkdir project.git #创建仓库名称
cd project.git
git init --bare #初始化数据库
2)Linux 客户端初始化测试 (client主机)
创建工作目录
mkdir git
拉取库到本地
使用git clone(克隆)拉取远程服务器新项目到本地工作目录。
cd git
git clone git@192.168.1.110:/home/git/project.git #加上初始化的路径
查看项目:
本地给新项目添加文件
给 project 项目添加一个文件
cd project/
echo "NO.1" > 1.html
git status #查看状态
第一次查看,这个文件还没有添加到暂存区的
添加到暂存区
使用 git add 把新建的文件加入暂存区域
git add 1.html
或
git add . #点代表目录下的所有文件
查看文件状态
有添加,那么就有删除(此处说的是删除暂存区里的操作,不会删除文件)
git rm --cached readme
提交到本地仓库
使用 git commit 命令把缓存区的文件添加到本地仓库
git commit -m "NO.1-html" #-m 后面添加备注信息
需设置账号和邮箱,需知道是那个用户提交的文件
设置账号和邮箱
git config --global user.name "xiaolu"
git config --global user.email "12346@qq.com"
重新提交修改到本地仓库
git commit -m "no.1"
git log 查看日志
git log
到目前为止自己本地仓库就提交结束了。之后就是提交到远程仓库了。
确认本地仓库和远程的状态是否正常
git remote -v 查看本地存储的远程仓库信息
git remote -v
说明:origin 表示远程仓库的别名(默认为 origin,fetch更新类似于 update,push推数据相当于 commit)以后提交代码的时候只需要使用 origin 这个别名即可。
扩展:
当不是 clone(克隆)出来的项目,就不会有任何结果,需自己添加,命令如下:
git remote add origin git@192.168.1.110:/home/git/project.git
git remote -v
origin 是起的别名,可以自定义
做完这步然后就是远程推数据了(必须保证本地仓库里面有提交,注意是本地仓库而不是暂存区)
把本地仓库代码推送到远程仓库
git push origin master
push是把暂存区里的数据推送数据到远程仓库
GIT 初始化
GIT 通常有两种方式来进行初始化:git clone 和 git init
1. git clone:克隆,一种简单的初始化方式,当有远程的 Git 版本库,只需要在本地克隆一份
例如: git仓库目录是 //var/www/html/,使用 git clone 用户名@远程库IP:/home/git/project.git '这个URL地址的远程版本库完全克隆到本地/var/www/html/目录下面
2. git init he 和 git remote:使用 git init 命令进行初始化,git以后会对改目录下的文件进行版本控制, 初始化时 git init --bare 加 --bare 初始化数据库则没有工作目录,此目录没有任何执行查阅权限,一般专门作为存放库文件时使用。
git remote add 命令来增加一个远程服务器端
例如:
mkdir /git_test
git init /git_test/ #初始化 git,指定git仓库文件路径,同时也是工作目录
cd /git_test/
git remote add test git@192.168.1.110:/home/git/project.git #添加远程仓库
[root@localhost git_test]# git remote -v
test git@192.168.1.110:/home/git/project.git (fetch)
test git@192.168.1.110:/home/git/project.git (push)
四.Git 基本命令
1、git pull:从版本库将代码拉到本地
2、git add:将所有改动的文件放到暂存区,由git进行管理
3、git rm:从当前工作空间中和暂存区中删除文件
4、git commit:提交当前工作空间的修改内容到本地仓库
5、git push:将本地commit的代码更新到远程版本库中,
6、git log:查看历史日志
五、分支操作
1.git的分支是什么
分支是从主分支分离出来进行另外操作,不影响主分支的操作,分支做完事情后合并到主分支上而分支的任务完成可以删掉了
Git的分支无论创建、切换和删除与合并,版本库大小都很快,只是修改指针
2.分支管理
通过 git branch 命令来查看我们git仓库的分支,*号代表目前所在的分支
git branch name 命令来创建分支,而建立的分支的指针,指向最新提交的对象
使用 git checkout name 命令切换分支,默认主分支为master,根据指针找到所指向的commit对象
每次提交,git都把他们串成一条线,master分支都会向前移动,master指向最新提交,HEAD此时指向master(HEAD指向当前分支,master指向提交点)
当建立分支test之前,只有master一主分支,所有的开发都是在master分支上,通过git branch test 创建test分支,如图二,但HEAD还是指向master分支的最近一次提交,执行git checkout test切换到test分支后,HEAD就指向test分支的最近一次提交c3
在test分支上进行代码文件提交 c4 和 c5两个版本,那test 和 head都指向test分支的最近一次提交c5,图三 master此时没有任何提交,仍然指向c3,这个时候将test分支合并到master分支,这个过程为 Fast-forward 快进,test任务完成可以通过 git branch -d test将他删除。
注;合并时要切换到主分支
当master分支上进行提交两个版本,此时master和head 指针都指向 c7,在那个分支开发head指向的就是那个分支上的commit,这时合并分支的话如下:
先切换到master分支,通过git merge test 将 test 分支合并到 master,在合并时不同分支不能对同一个文件做修改,将c7和c5合并产生新的文件快照并用新的commit对象c8记录
如对同一个文件进行了修改产生了冲突,git就会停下合并操作,处理号冲突后在提交(c8)
但是test是没有移动的,此时还可以在test上继续开发,再合并到master,如果test已经没有利用价值了就可以删掉了。
3.创建合并分支:
1)查看分支
cd git/ #进入工作目录仓库
git branch #查看分支情况,*号代表当前所在分支
2)创建分支
语法:git branch 分支名
git branch test #创建分支
git branch #查看分支
3)切换分支
git checkout test
git branch
在test分支上操作:
echo "no.5" > 5.html
git add 5.html #添加到暂存区
git commit -m "no.5-> 5.html" #提交到本地仓库
注:git checkout -b 分支名 #创建并切换到分支
4)重命名分支
git branch -m 旧分支名 新分支名
5)合并分支
合并前保证在master主分支上
git checkout master
git merge test #合并分支
6)删除分支
git branch -d 分支名
git branch -d 分支名 #强制删分支