一.版本控制系统
1.git属于分布式版本控制系统
客户端并不是只提取最新版本的文件,而是把原始的代码仓库完整的克隆下来。
优点:
1.由于任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在本地执行,速度就是相当的快,并且可以在网络断开的时候操作任然不受影响,可以频繁的进行提交更新,等到有网络的时候再上传到远程的仓库就可以了。
2.git的分支模型,相当的轻量级,被称为“必杀技”
3.时刻保证数据的完整性
4,任意两个开发者之间可以很好的解决冲突
缺点:
1.模式上比svn更加的复杂
2.每个开发人员都拥有代码,不利于核心代码的保密(如果有重要的代码需要保密,则不建议使用git)
3.不太符合常规思维
2.svn属于集中式的版本控制系统
有一个单一的几种管理的服务器,保存 所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器上,进行文件上传和更新。
优点:
1.使用简单,比较符合我们的常规思维
2.同步代码比较简单,只要一步操作即可
3.所有的代码都已服务端为准,代码一致性比较高
缺点:
1.丢失数据的分险:最显而易见的,由于集中化的特点,如果版本库的服务器磁盘发生故障等,你不能保证所有的数据已经有人提取出来了,最坏的情况是彻底丢失整个项目的所有历史更改记录
2.网络中断的情况下,协作就无法进行了,因为无法连接服务器进行上传和更新。
git与svn的区别
git: 分布式 ---- 没有中心代码库,所有机器之间的地位同等(每台机器上都有相同的代码)
svn:集中管理的 ---- 有中心代码库,其他的都是客户端
git的相关概念
1.工作区(Working Driectory)
存放git版本仓库的地方就是工作区(放源代码的地方)
2.暂存区
git的版本库里存放了很多东西,其中最重要的就是stage(或者叫index)的暂存区,(会将代码添加到缓存区,没有问题之后在提交到代码仓库)
3.版本库(Repository)
工作区有一个隐藏目录.git,这个不算是工作区,而是Git的版本仓库
4.HEAD
指向你最近一次提交后的结果(现在哪个是版本,头就会指向这个版本)
首先我们需要在工作区创建文件,
然后将文件添加暂存区,git add 加上文件的路径
从暂存区提交到当前master分支的HEAD:
git commit -m “版本描述信息” # 提交暂存区里的修改到版本库的分支
版本号:最核心用的是id号。每个版本都会有一个id号,也就是commit id,
查看版本号:
版本号可以通过版本日志查看
commit完成的功能类似快照,可以使用git log查看每次的commit记录
常用命令说明
命令 | 命令说明 |
---|---|
#add | 添加文件内容至索引 |
bisect | 通过二分查找定位引入 bug 的变更 |
#branch | 列出、创建或删除分支 |
#checkout | 检出一个分支或路径到工作区 |
#clone | 克隆一个版本库到一个新目录 |
#commit | 记录变更到版本库 |
#diff | 显示提交之间、提交和工作区之间等的差异 |
fetch | 从另外一个版本库下载对象和引用 |
grep | 输出和模式匹配的行 |
#init | 创建一个空的 |
#log | 显示提交日志 |
#merge | 合并两个或更多开发历史 |
#mv | 移动或重命名一个文件、目录或符号链接 |
#pull | 获取并合并另外的版本库或一个本地分支 |
#push | 更新远程引用和相关的对象 |
rebase | 本地提交转移至更新后的上游分支中 |
#reset | 重置当前HEAD到指定状态 |
#rm | 从工作区和索引中删除文件 |
show | 显示各种类型的对象 |
#status | 显示工作区状态 |
#tag | 创建、列出、删除或校验一个GPG签名的 tag 对象 |
部署git 直接用 yum install 就行
准备:
因为git是分布式版本控制系统,所以,每个机器都必须注册:你的名字和Email地址
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的git仓库都会使用这个配置。
所有的机器都添加,只要邮箱和用户不一样就可以
# git config --global user.email "[email protected]" ----设置邮箱
# git config --global user.name "soho" ----加添用户
# cat /root/.gitconfig
# git config --global color.ui true #语法高亮
# git config --list #查看全局配置
通过git init这个命令可以把目录变成git可以管理的仓库:
第一种情况:可以改代码,还能上传到别人的机器比人也能从你这里下载但是别人不能上传代码到你的机器上
第二种情况:只是为了上传代码用,别人从这台机器上下载代码也可以上传代码到这台机器上,经常用与核心代码库
创建裸库:适用于作为远程中心仓库来使用
创建裸库才可以从别处push传代码过来,使用git init --bare参数----裸库
裸库:由版本控制文件组成,不能直接操作,可以在远端直接推送,通常用于多人协作,版本库放在远端服务器上
普通库:由源代码+裸库组成,可以直接操作,但是不能在远端直接推送代码到当前分支,通常用于本地版本控制
git init --bare 库名 #创建裸库
git add 文件名 / git add * #把文件添加到暂存区,使用“git add” 建立跟踪
git commit -m "描述" #把暂存区文件提交到仓库分支
git status #查看git状态
git log #查看现在的版本,哪个版本在第一个就是当前使用的版本
git reset --hard HEAD^ #回退到上一个版本
gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。#
/opt/gitlab/bin/gitlab-rake gitlab:backup:create # 数据备份