六 Git版本控制

环境准备

主机名 node1  ip地址10.0.0.11

             node2             10.0.0.12

             node3             10.0.0.13

操作系统centos7 

在node1中设置主机解析

10.0.0.11 node1

10.0.0.12 node2

10.0.0.13 node3

文件下载 https://pan.baidu.com/share/init?surl=6m5BVuhBSgtw1-_XTaJdmw 密码 pct9

=================================================================

为什么需要做git版本控制

我们在做某件事的时候,需要很多次才能完成,为了避免不必要的风险在下一次继续做的时候都会

手动做个一备份,方便有问题时能回滚、对比 找出问题。

但这样比较麻烦,所以有了git版本控制。

他可以自动生成备份、知道改动的地方、随时回滚

 常见的版本控制系统

SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,

所有的使用者无法使用SVN,无法进行提交或备份文件。

2

Git
分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git。

当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。

==========================================================

git安装与配置

Git分布式版本控制系统最佳实践 - 老男孩教育博客 http://blog.oldboyedu.com/git/
系统环境
CentOS7.4 防火墙和selinux关闭
安装Git
yum -y install git

[root@node1 ~]# git --version
git version 1.8.3.1

Git全局配置
git config --global user.name "zyc" #配置git使用用户
git config --global user.email "[email protected]" #配置git使用邮箱

git config --global color.ui true #语法高亮
git config --list # 查看全局配置

 初始化Git工作目录

需要管理一个目录需要先初始化

mkdir git_data
cd git_data/
# 初始化 会在目录中生成一个.git的隐藏目录
git init
# 查看工作区状态
git status

 

 

git_data工作目录  工作目录里的.git/ 目录是本地仓库  本地仓库里的index是暂存区

touch a.txt
git status

文件未被跟踪

git add a.txt 把文件传到了暂存区  由未跟踪状态到已跟踪状态
git status

# git rm --cached a.txt  从缓存区删除 变为未跟踪状态

# git status

git commit -m 'first commit' #→git commit提交暂存文件至版本库 从以跟踪状态变为未被修改状态

以源文件的形式存储 被git管理

 

删除暂存区数据

没有添加到暂存区的数据直接rm删除即可。
已经添加到暂存区数据:
git rm --cached database
#→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
git rm -f database
#→将文件数据从git暂存区和工作目录一起删除

==========================================

# rm -f b.txt   先删除工作目录的文件

# git rm --cached b.txt  从追踪列表中移除

 

# git commit -m 'delete b.txt'  提交生效 从本地仓库删除

 重命名暂存区数据

没有添加到暂存区的数据直接mv/rename改名即可。
已经添加到暂存区数据:
git mv a.txt  ab.txt

git commit -m "rename a.txt ab.txt"   提交生效

查看历史记录

git log #→查看提交历史记录
git log -2 #→查看最近几条记录
git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异
git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,

                      对文件添加或移动的行数,并在最后列出所有增减行的概要信息
git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息
git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录
git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。

 还原历史数据

1  # echo "333">>ab.txt 修改工作目录的文件

看状态 可以提交到缓存目录生效,也可以用缓存区的覆盖工作目录进行恢复

# git checkout -- ab.txt 根据提示覆盖

# cat ab.txt   恢复到了之前的状态
123
222

2  # echo "333" >>ab.txt

# git add .  提交到缓存目录

现在就只有本地仓库的数据是原来的,那就通过仓库进行还原

# git log --oneline 查看提交仓库的记录

# git reset --hard  8af7b39  利用版本指针恢复到了最后一次的提交

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,

其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,

为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,

另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,

上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。
git reset --hard HEAD^ #→还原历史提交版本上一次
git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

 还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,

想撤销更改,但是git log已经找不到这个版本了。
git reflog #→查看未来历史更新点

 然后利用 hard

标签使用

前面回滚使用的是一串字符串,又长又难记。
   git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。最近的一次提交打上标签

# git tag v2.0 9947d1bb245821 给指定的提交记录打上标签

                 

git tag #→查看当前所有的标签
git show v1.0 #→查看当前1.0版本的详细信息
git tag v1.2 -m "version 1.2 release is test" #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
[root@centos7 git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@centos7 git_data]# git reset --hard V1.0
HEAD is now at a66370a add oldboy dir

对比数据

git diff可以对比当前文件与缓存区文件的区别,知道了对README作了什么修改

# echo '444' >>a.txt

# git diff

# gir diff --cached 查看缓存区文件于仓库文件的区别

 

确认没问题 就提交到仓库

# git commit -m "modify a.txt second"

分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,

平时不要随便直接修改里面的数据文件。
那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,

开发完合并到dev分支,最后dev分支合并到master分支。
所以团队的合作分支看起来会像下图那样。

 

创建分支

# git status  默认安装好git时 都是在master分支上操作的

git branch linux #→创建分支 星号在那个分支上就是 当前分支

git branch dev

git checkout dev#→切换分支
git branch #→查看当前分支情况,当前分支前有*号

测试在dev分支修改文件并提交到git仓库,最后切换回master分支,你会发现什么呢?

最终都会指向同一个分支

 

合并分支

想把dev的工作成果合并到master分支上
先切换到master分支
git merge dev #→合并dev分支至master
查看合并的文件
git branch -d dev#→确认合并完成后,可以放心地删除dev分支。

分支冲突

合并分支后 两个分支对同一个文件进行修改再次合并就会报错

修改a.txt

vim  a.txt  删掉多余的内容 然后提交到缓存和仓库

# git add .
# git commit -m "merge dev to master"
# git status

 

 windows 客户端的使用

前面讲的都是linux客户端,在讲讲windows客户端使用,安装Git-2.10.0-64-bit。
windows的git,本质是windows上的linux系统

安装完成 桌面右键 Git Bash Here 进入命令行界面  操作与linux里的Git 操作一样

mkdir  git_data

cd git_data

git config --global user.name "zhou"

git config --global user.email "[email protected]"

git  init

touch a.txt

git add .

git commit -m "commit a.txt"

或者右键Git  GUI Here

TortoiseGit-2.2.0.0-64bit 给git加外壳,svn客户端的git版本

Git服务器 使用 

前面我们已经知道Git人人都是中心,那他们怎么交互数据呢?
使用GitHub或者码云等公共代码仓库
使用GitLab私有仓库

 私有仓库GitLAB

安装文档 https://about.gitlab.com/downloads/#centos7
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
机器内存给大点
yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure #→初始化,就执行一次
gitlab-ctl status/stop/start
通过浏览器访问页面,设置初始密码,其他操作类似GitHUB。
账户:root 密码自己设置为12345678

GitHuB使用

Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,

拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,

Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,

您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,

当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。
具体使用方法见博客http://blog.oldboyedu.com/git/

   

猜你喜欢

转载自www.cnblogs.com/cqzhou/p/9268239.html
今日推荐