Git版本控制

Git软件的好处是所有的历史版本的文档会被保留,方便以后调用旧版本的文档
svn(subversion)这个软件也可以记录所有的历史版本
svn叫集中式版本控制系统:开发者之间共用一个仓库(repository),所有操作需要联网。
Git叫分布式版本控制系统:每个开发者都是一个仓库的完整克隆,每个人都是服务器;支持断网操作。
二、版本库是版本控制的核心,任意数量客户端,客户端通过写数据库分享代码。
一、Git基本概念:
Git仓库:保存所有数据的地方。
工作区:从仓库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区:就是一个文件,索引文件,保存了下次将提交的文件列表信息。
二、版本控制的主流软件:Git 和 svn
集中式版本控制软件 CVS SVN(Subversion)
分布式版本控制软件 Git BitKeeper(收费)
三、暂存区相当于书的目录(不包括内容)
四、Git工作流程:1.从远程服务器下载所有版本的文件到自已本机的(Git仓库),2.在自已本机的Git仓库调文件在工作区修改内容;在暂存区存修改过的文件的目录;提交修改过的文件到自已的Git仓库生成新的版本,3.把自已的Git仓库的文件上传到远程服务器。

一、Git基本操作总结:
1.使用git常用指令
clone 将远程服务器的仓库克隆到本地
config 修改git配置
add 增加修改到暂存区
commit 提交修改到本地仓库
push 提交修改到远程服务器
pull 将远程服务器上新的数据更新到自已本地
2.部署Git服务器(192.168.2.100作为远程git服务器)
yum -y install git
mkdir /var/git
git init /var/git/project --bare
ls -a /var/git/project
3.客户端测试(192.168.2.200作为客户端主机)
yum -y install git
git clone [email protected]:/var/git/project
cd project
ls -a #//会有一个 .git的目录,这就是git仓库
git config --global user.email “[email protected]” #//此行只要操作一次以后不用再操作
git config --global user.name “Your Name” #//此行只要操作一次以后不用再操作
echo “init date” > init.txt
mkdir demo
cp /etc/hosts demo
git add . #//增加修改到暂存区, “.” 表示当前目录
git commit -m “注释:增加了init.txt文件和demo目录” #//注明修改部分并提交修改到本地仓库
git config --global push.default simple #//此行只要操作一次以后不用再操作
git push
git status #//查看状态
3.此时已经放入了远程服务器了(web1)但是在web1中是无法看到的。
4.查看版本日志。
git log
git log --pretty=oneline
git log --oneline
git reflog
5.可以在web2中把库先删除再克隆一次如果有文件说明就已经放入了远程服务器了(web1)。
rm -rf project/
git clone [email protected]:/var/git/project
cd project/
ls #//此时有之前存入的文件,说明之前已经放入了远程服务器了(web1)
6.将服务器上的数据更新到本地(web1的数据更新到web2)。
备注:可能其他人也在修改数据并提交服务器,就会导致自己的本地数据为旧数据,使用pull就可以将服务器上新的数据更新到本地。(此时不用再克隆了,只要pull即可)
git pull
7)备注:客户端也可以使用图形程序访问服务器。
Windows需要安装git和tortoiseGit。

二、HEAD指针操作
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。
1.HEAD指针基本操作
1)准备工作(多对数据仓库进行修改、提交操作,以产生多个版本)。
echo “new file” > new.txt #//新建文件
git add . #//增加修改到暂存区
git commit -m “add new.txt” #//提交修改到本地仓库
echo “first” >> new.txt
git add .
git commit -m “new.txt:first line”
多次操作上面的命令会产生多个版本
2) 查看Git版本信息。
git reflog
git log --oneline
3)移动HEAD指针,将数据还原到任意版本。移指针的目的是为了找某个版本的文件,找到复制走要的文件之后,再把指针移回最新版的位置。
提示:当前HEAD指针为HEAD@{0}。
git reflog #//#查看指针移动历史即查看所有版本
git reset --hard 7bba57b #//切换版本,其中7bba57b为版本号。当前HEAD指针为HEAD@{0}。
git reflog #//#查看指针移动历史即查看所有版本
cat num.txt #查看文件是否为123,456
git reset --hard 04ddc0f #恢复num.txt的所有数据(即把指针移到最新版去)
4)模拟误删后的数据还原操作。
git rm init.txt #删除文件(只是假删除)
git commit -m “delete init.txt” #提交本地仓库
git reflog #查看指针移动历史即查看所有版本
git reset --hard 04ddc0f #恢复数据(即把指针移到最新版去)
ls

三、Git分支操作
Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响
常见的分支规范如下:
MASTER分支(MASTER是主分支,是代码的核心)。
DEVELOP分支(DEVELOP最新开发成果的分支)。
RELEASE分支(为发布新产品设置的分支)。
HOTFIX分支(为了修复软件BUG缺陷的分支)。
FEATURE分支(为开发新功能设置的分支)。
1.查看并创建分支
1)查看当前分支
git status

On branch master

nothing to commit, working directory clean
git branch -v #//查看所有分支

  • master 0dc2b76 delete init.txt
    2)创建分支
    git branch hotfix #//创建分支
    git branch feature #//创建分支
    git branch -v #//查看所有分支
    2.切换与合并分支
    1)切换分支
    git checkout hotfix #切换分支
    git branch -v
    2)在新的分支上可以继续进行数据操作(增、删、改、查)。
    echo “fix a bug” >> new.txt
    git add .
    git commit -m “fix a bug”
    3)将hotfix修改的数据合并到master分支。
    注意,合并前必须要先切换到master分支,然后再执行merge命令
    git checkout master #//切换分支
    cat new.txt #默认master分支中没有hotfix分支中的数据
    git merge hotfix #//合并分支
    4)将所有本地修改提交远程服务器。
    git push #//上传到远程服务器
    3.解决版本分支的冲突问题
    1)在不同分支中修改相同文件的相同行数据,模拟数据冲突。
    git checkout hotfix
    echo “AAA” > a.txt
    git add .
    git commit -m “add a.txt by hotfix”
    git checkout master
    echo “BBB” > a.txt
    git add .
    git commit -m “add a.txt by master”
    git checkout master #//切换分支
    git merge hotfix #//合并分支
    2)查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突。
    cat a.txt #该文件中包含有冲突的内容
    vim a.txt #修改该文件,为最终需要的数据,解决冲突
    git add .
    git commit -m “resolved”
    总结:分支指针与HEAD指针的关系。
    创建分支的本质是在当前提交上创建一个可以移动的指针
    如何判断当前分支呢?答案是根据HEAD这个特殊指针

四、Git服务器
Git可以支持三种服务器:创建SSH协议服务器;创建Git协议服务器;创建HTTP协议服务器
1.SSH协议服务器(支持读写操作)
1)创建基于密码验证的SSH协议服务器(web1主机操作)。
git init --bare /var/git/base_ssh
2)客户端访问的方式(web2主机操作)。
git clone [email protected]:/var/git/base_ssh
rm -rf base_ssh
3)客户端生成SSH密钥,实现免密码登陆git服务器(web2主机操作)。
ssh-keygen -f /root/.ssh/id_rsa -N ‘’ #//这条命令为非交互的,所以可以写入脚本中
ssh-copy-id 192.168.2.100
rm -rf project/
git clone [email protected]:/var/git/project
2.Git协议服务器(只读操作的服务器)(如果没有SSH时,要想使作Git,就按如下操作)
1)安装git-daemon软件包(web1主机操作)。
yum -y install git-daemon
2)创建版本库(web1主机操作)。
git init --bare /var/git/base_git
3)修改配置文件,启动git服务(web1主机操作)。
vim /usr/lib/systemd/system/[email protected] #//把/var/lib/git改为/var/git
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git
–export-all --user-path=public_git --syslog --inetd –verbose
systemctl start git.socket
4)客户端访问方式(web2主机操作)
git clone git://192.168.2.100/base_git
3.HTTP协议服务器(只读操作的服务器)
1)安装gitweb、httpd软件包(web1主机操作)。
yum -y install httpd gitweb
2)修改配置文件,设置仓库根目录(web1主机操作)。
vim +11 /etc/gitweb.conf
$projectroot = “/var/git”; #添加一行
3) 创建版本仓库(web1主机操作)
git init --bare /var/git/base_http
4)启动httpd服务器
systemctl start httpd
5)客户端访问方式(web2主机操作)
注意:调用虚拟机中的firefox浏览器,需要在远程时使用ssh -X 服务器IP,并且确保真实主机的firefox已经关闭。
firefox http://192.168.2.100/git/

网上git:
https://github.com

命令行操作(需要联网的主机,如真实机)
[root@pc001 ~]# yum -y install git
[root@pc001 ~]# git clone https://github.com/账户名称/仓库名称
#clone指令用于将服务器仓库中的资料打包下载到本地
[root@pc001 ~]# cd 仓库名称
[root@pc001 ~]# 任意修改文件,或新建文件
[root@pc001 ~]# git add .
#add添加新文件
[root@pc001 ~]# git commit -m “test”
[root@pc001 ~]# git push
#commit和push实现提交代码的功能
[root@pc001 ~]# git pull
#pull可以从githuab服务器拉取数据到本地

你可能感兴趣的:(git,版本控制)