版本控制
基本概念
版本库:典型的客户/服务器系统
–版本库是版本控制中心的核心
–任意数量客户端
–客户端通过写数据库分享代码
分布式版本控制
1)集中式版本控制系统
–开发者之间共用一个仓库(repository)
–所有操作需要联网
2)分布式版本控制系统
–每个开发者都是一个仓库的完整克隆,每个人都是服务器
–支持断网操作
3)Git基本概念
–Git仓库:保存所有数据的地方
–工作区:从仓库中提取出来的文件,放在磁盘上供你使用或修改
–暂存区:就是一个文件,索引文件,保存了下次将提交的文件列表信息
工作流
常用软件
集中式版本控制软件
–CVS
–SVN(Subversion)
分布式版本控制软件
–Git
–Bitkeeper(收费)
-+++++++++++++++++++++++++++++++++++±---------------------------
Git基础
服务器设置
安装Git软件
[root@svr5 ~]# yum -y install git
[root@svr5 ~]# git --version
git -version 1.8.2.1
创建服务器版本仓库
服务器是一台多人协作的中心服务器
– init初始化一个空仓库(没有具体数据)
客户端操作
客户端访问方式
–本地访问:git clone file:///var/git
–远程ssh访问:git clone root@服务器IP:/var/git
–web:服务器需要额外的配置Web服务器;客户端可以浏览器访问;git clone http://服务器IP/git仓库;Git clone https://服务器IP/git仓库。
客户端命令行工具
git支持的子命令操作:
– clone 将远程服务器的仓库克隆到本地
–config 修改git配置
–add 添加修改到暂存区
–commit 提交修改到本地仓库
–push 提交修改到远程服务器
Clone克隆服务器仓库到本地
config修改git配置
客户端用户标记信息(跟Git账户和密码无关)
导入数据,add提交本地暂存区
提示:必须进入工作目录git操作
commit提交本地仓库
push将本地修改提交远程服务器仓库
push.default定义如何推送(更安全地推送)
从远程下载使用pull命令
–git pull
log查看历史日志
Windows客户端软件
需要安装git和tortoise
-------------------------++++++++++++++++++++++++++++++++++++++++++++±-------------------
Git进阶
HEAD指针概述
–HEAD指针是一个可以在任何分支和版本移动的指针
–通过移动指针我们可以将数据还原至任何版本
移动HEAD指针
先使用log指令查看版本信息
我们需要回到bde26这个版本
[]root@client1 git]# git reset --hard bde26
HEAD现在位于bde26d2 add a.txt file
在使用ls查看当前工作目录的资料已经还原
[]root@client1 git]# ls
使用HEAD^将版本回滚一个版本
[]root@client1 git]# git reset --hard HEAD^
HEAD现在位于5ec6b76 test
使用HEAD~数字,可以将版本回归n个版本
[]root@client1 git]# git reset --hard HEAD~2
HEAD现在位于bde26d2 add a.txt file
默认log仅显示当前到之前的版本信息,–all查看所有
Git分支
分支的基本概念:分支可以让开发分多条主线同时进行,每条主线互不影响
–按功能模块分支、按版本分支
–分支也可以合并
常见的分支规范
–MASTER分支(MASTER是主分支,是代码的核心)
–DEVELOP分支(DEVELOP最新开发成果的分支)
–RELEASE分支(为发布新产品设置的分支)
–HOTFIX分支(为了修复软件BUG缺陷的分支)
–FEATURE分支(为开发新功能设置的分支)
管理多分支
查看当前分支
[root@client1 git]# git status
#位于分支 master
无文件要提交,干净的工作区
[root@client1 git]# git branch -v
- master 470f049
创建分支
[]root@client1 git]# git branch hotfix
[]root@client1 git]# git branch feature
[]root@client1 git]# git branch -v
feature 470f049
hotfix 470f049
- master 470f049
切换分支
[root@client1 git]# git checkout hotfix
切换到分支 ‘hotfix’
[root@client1 git]# git branch -v
feature 470f049
*hotfix 470f049
master 470f049
在新的分支上就可以继续修改代码
–修改文件、创建文件等操作
–正常add,commit提交版本库
将hotfix合并到master分支
合并前,一定要切换到master分支;执行merge命令合并分支
[root@client1 git]# git checkout master
切换到分支 ‘master’
[root@client1 git]# git merge hotfix
更新 470f049…79d0ec1
Fast-forward
a.txt | 1 +
bug.txt | 1 +
2 file changed, 2 insertions(+)
create mode 100644 bug.txt
解决分支冲突
修改了不同的分支中相同的文件的相同行
– 系统无法合并分支,产生了冲突
Git服务器
ssh协议
密码认证访问
–服务器安装Git
–使用Git命令初始化版本仓库
–客户端使用ssh远程访问(可读写权限)
[root@client1 git]# git init /var/git --bare
[root@client1 git]# ls /var/git/
[root@client1 git]# git clone root@服务器IP:/var/git
正克隆到“git”…
root@服务器IP‘s password: <需要输入密码>
免密码远程Git服务器(密钥授权)
客户端生成ssh密钥
[root@client1 git]# ssh-keygen -f /root/.ssh/id_rsa -N "
将密钥拷贝给Git服务器
[root@client1 git]# ssh-copy-id Git服务器IP地址
测试上传、上传代码到远程服务器
[root@client1 git]# git clone root@服务器IP:/var/git
[root@client1 git]# git push
Git协议
Git协议访问支持无授权访问(只读)
服务器安装git-daemon软件包
[root@svr5 git]# yum -y install git-daemon
服务器初始化仓库(必须要在/var/lib/git/目录创建仓库)
[root@svr5 git]# git init --bare /var/lib/git/project
服务器启动Git服务
[root@svr5 git]# systemctl restart git.socket
客户端使用git协议访问(只读)
[root@svr5 git]# git clone git://服务器IP//project
HTTP协议
支持浏览器访问
–服务器安装gitweb软件包
[root@svr5 git]# yum -y install httpd gitweb
修改配置文件,设置仓库根目录
[root@svr5 git]# vim +11 /etc/gitweb.conf
$projectroot="/var/lib/git" #添加一行
启动httpd服务
[root@svr5 git]# systemctl restart httpd
[root@client ~]# firefox http://服务器IP/git/
---------------------------------+++++++++++++++++++++++++±-----------------------
GitHub
简介:GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。
GitHub于2008年4月10月正式上线
-------------------++++++++++++++++++++++++++++++++±--------------------------+++++++++++++++++++±-----------
RPM打包
基本概念
应用场景
–官方未提供RPM包
–官方RPM无法自定义
–大量源码包,希望提供统一的软件管理机制
打包流程
准备源码包软件
安装rpm-build
编写编译配置文件
编译RPM包
编译打包RPM的命令工具
将源码包复制到rpmbuild子目录
编写编译配置文件
新建SPEC文件
编译RPM包
使用spec文件编译RPM包
-++++++++++++++++++++++++++++++++++++±--------------------+
无法提交代码
问题现象
故障错误信息
原因分析
分析故障信息
– fatal: Not a git repository (or any of the parent directories): .git
分析故障原因
–没有进入代码仓库就执行了add指令
–Git指令必须在git仓库中操作