企业实战--持续集成与持续交付(git工具使用)
一、版本控制系统简介版本控制系统(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。版本控制系统通常分为本地版本控制系统、集中式版本控制系统、分布式版本控制系统。本地版本控制系统许多人习惯用复制整个项目目录的方式来保存不同的版本,
一、版本控制系统简介
版本控制系统(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。版本控制系统通常分为本地版本控制系统、集中式版本控制系统、分布式版本控制系统。
本地版本控制系统
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。 它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
集中式版本控制系统
对于如何让不同系统上的开发者协同工作,本地版本控制系统显然力不从心。于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,简称 DVCS)的面世解决了CVCS单点故障的缺陷。在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
在这里插入图片描述
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
二、git简介
Git是目前世界上最先进的分布式版本控制系统。
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
Git必看秘籍:https://git-scm.com/book/zh/v2
Git特点
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支) 完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Git状态
Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
三、git安装
git为rhel7自带,因此可以直接安装:
安装Git:
# yum install -y git
获取 Git 仓库通常有两种方式:
将尚未进行版本控制的本地目录转换为 Git 仓库。
从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone
初始化版本库:
$ mkdir demo
$ git init
Initialized empty Git repository in /home/git/demo/.git/
$ ls .git/
branches config description HEAD hooks info objects refs
.git目录是git跟踪管理版本库的,没事别瞎溜达!
添加用户信息才能上传
$ git config --global user.name "xzt"
$ git config --global user.email xzt@redhat.org
四、git使用
注意: git必须在仓库目录中执行
检查当前文件状态
$ git status
$ git status -s //简化输出
状态简览
$ git status -s
M README #文件修改
MM Rakefile #表示对暂存区的文件做了修改
A lib/git.rb #以添加的文件,处于暂存区
M lib/simplegit.rb #对MM状态的文件进行了添加操作后的状态
?? LICENSE.txt #未添加的新文件
添加新文件到暂存区
$ git add testfile
添加后文件就处于暂存区了,查看文件的状态未A
如在目录中有一些文件我们不希望其放在仓库中,就可以编辑忽略文件:
$ cat .gitignore
.* //忽略所有隐藏文件
/test //只忽略当前目录下的test文件
build/ //忽略任何目录下名为 build 的文件夹
文件的内容就是想要忽略的文件或目录名。
查看已暂存和未暂存的修改了哪些内容
$ git diff
提交更新
$ git commit -m
-m选项表示文件的描述。
跳过使用暂存区域直接上传
$ git commit -a -m 'added new benchmarks'
正常将文件保存到仓库的步骤就是先创建文件,再add,最后commit。
移除文件
$ git rm PROJECTS.md
$ git rm --cached README
重命名文件
git mv README.md README
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.md README
$ git rm README.md
$ git add README
查看提交历史
$ git log
$ git log -p -2 #查看前两个
$ git log --stat
$ git log --pretty=oneline #显示为id和文件名
取消暂存的文件到工作区
$ git reset HEAD README.md
撤消对文件的修改,也可以在使用rm -rf 或git rm删除文件后撤销删除。
$ git checkout -- README.md 撤销修改
$ git checkout HEAD README。md 恢复删除
版本回退:
$ git reflog #查看历史版本
$ git reset --hard efa267a #其中最后为版本id
五、git结合github
远程仓库:注册github帐号,并新建一个仓库:
两种方式饥可以推送本地仓库内容到github:https和ssh
采用ssh方式:
server1
# ssh-keygen #生成本地密钥
# cd
# cd .ssh/
# cat id_rsa.pub #复制公钥
server1利用私钥免密连接github的公钥
添加远程仓库:
# git remote add origin git@github.com:xzt/demo.git
添加后可以使用git remote -v
查看远程仓库的列表。
添加后进行推送:
cd demo
echo haha >testfile
git push origin master
推送后就可以在github看到仓库中的内容了
此时如果在本地把仓库目录删除了,可以通过以下命令克隆github里的内容:
# rm -rf demo/
# git clone git@github.com:xzt/demo.git
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)