DevOps之四:Git & GitLab

一、Git
1、Git是什么
Git是目前世界上最先进的分布式版本控制系统,本地可以管理版本.

2、Git和SVN的区别


SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

二、Git使用
1、安装
windows下安装msysGit.exe,使用Git Bash命令窗口操作
git常用命令汇总如下:

mkdir// XX (创建一个空目录 XX指目录名)
pwd// 显示当前目录的路径。
git init          //把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX       //把xx文件添加到暂存区去。
git commit –m “XX”  //提交文件 –m 后面的是注释。
git status        //查看仓库状态
git diff  XX     // 查看XX文件修改了那些内容
git log          //查看历史记录
git reset  --hard HEAD^ //或者 git reset  --hard HEAD~ 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 )
cat XX         //查看XX文件内容
git reflog       //查看历史记录的版本号id
git checkout -- XX  //把XX文件在工作区的修改全部撤销。
git rm XX          //删除XX文件
git remote add origin https://github.com/--  //关联一个远程库
git push –u origin master // –u(第一次要用-u 以后不需要)把当前master分支推送到远程库
git clone https://github.com/--- // 从远程库中克隆
git checkout –b dev    //创建dev分支 并切换到dev分支上
git branch    //查看当前所有的分支
git checkout master// 切换回master分支
git merge dev    //在当前的分支上合并dev分支
git branch –d dev    //删除dev分支
git branch name    //创建分支
git stash     //把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list     //查看所有被隐藏的文件列表
git stash apply     //恢复被隐藏的文件,但是内容不删除
git stash drop     //删除文件
git stash pop     //恢复文件的同时 也删除文件
git remote     //查看远程库的信息
git remote –v     //查看远程库的详细信息
git push origin master      //Git会把master分支推送到远程库对应的远程分支上

2、设置
设置用户名和邮箱
(1)查看

git config user.name
git config user.email

(2)设置

git config、git config --global、git config --system有何区别?
git config:git config -e 会打开该项目所属的配置文件(作用域最小,值针对当前项目有效)
git config --global:git config -e --global会打开C:\Users\XiaoRui\.gitconfig下的配置文件(作用域中等,为登陆这台计算机的用户)。
git config --system:git config -e --system 会打开D:\Program Files\Git\etc\gitconfig(作用域最大,整台计算机,不管登陆那个帐号,不管哪个项目)

优先级:git config > git config --global > git config --system 也就是作用域范围越广的优先级越低

如果根据不同项目设置不同的用户和邮箱,有两种方式:
方式一:打开.git下的config文件 在最下方增加

[user]
    name = 'xxxx'
    email = 'xxx@163.com'

方式二:直接在项目目录下运行命令

git config  user.name xxx
git config  user.email xxx@163.com

(3)取消

git config [--global] --unset user.name
git config [--global] --unset user.email

2、Git使用

(1)git init创建版本库
(2)git add 将文件添加到暂存区
(3)git commit将文件提交到本地仓库
(4)git status来查看是否还有文件未提交
(5)git diff 看文件到底改了什么内容
(6)git log --pretty=oneline查看下历史记录,显示从最近到最远的日志,可以看到最近三次提交
(7)回退版本两个方式
① git reset --hard HEAD^回到上一个版本,git reset --hard HEAD^^回退到上上一个版本,以此类推;
② 如果回退到前50个版本的话,使用方法①就显得不太明智了,我们可以使用简便命令操作:git reset --hard HEAD~50就可以了
如果又想回到刚才回退之前的最新版本了,但是使用git log --pretty=oneline查看的是比当前老的版本,我们只能通过git reflog来查看比当前新的版本, 这时候我们看每一行都有一串黄色的字符,这个是每次的版本号。
可以通过git reset --hard 版本号到达指定版本号
(8)撤销修改
1) 如果知道要删掉的内容,直接可以手动去改掉,然后重新add并commit即可。
2) 也可以按照前面版本回退的方法直接恢复到上一个版本。git reset --hard HEAD^
3)git checkout -- file 撤销修改
    1)readme.txt自从修改之后还没放到暂存区,使用撤销修改就回到了和版本库一模一样的状态了。
    2) 另一种就是readme.txt已经放入暂存区看,接着又作了修改,撤销修改之后就回到了添加暂存区后的状态。
(9)rm file 临时删除文件
rm file && git commit -m "" 就彻底删除
只要未进行commit,使用git checkout -- file 可恢复文件

 

3、远端仓库使用
(1)git remote添加远程仓库
先有本地库更新,后有远程库:我们有本地的Git仓库,又想在GitHub/GitLab中创建一个Git仓库,并且希望这两个仓库进行远程同步,这样GitHub/GitLab的仓库别人就可以来写作了
示例:git remote add origin https://github.com/duanmingpy/helloworld.git
(2)git clone克隆/拉取代码
在新文件夹里,如果远程库有更新,怎么克隆到本地呢
示例:git clone https://github.com/duanmingpy/remote_repo.git
(3)git push推送代码
只要本地有commit,就可以使用git push origin master把本地master分支的最新修改交托给GitHub/GitLab上了,现在就真正意义上的拥有了分布式版本库了

4、创建与合并分支
每次提交,Git都把它们串成一条时间线,这条时间线是一个分支。
(1)git branch查看所有分支
(2)git checkout -b 分支名 创建并切换到这个分支
相当于两条命令:git branch 分支名 创建分支和 git checkout 分支名 切换分支。
(3)合并某分支到当前分支

git merge 分支名
示例:在master分支下,将分支by的内容合并到master上
git merge by

另外,对于同一个文件,对一块内容作了修改并提交到各自的版本上,两个版本合并时会提示冲突 merge失败
我们可以从上面这一张图可以仔细的分析出,两个分支上都做了新的提交,在合并的时候会有冲突,并且分支名也从master变成了master | MERGING, 同时我们cat README.md发现文件内容也变了,在git status上给我们提供了解决方法:git commit;
Git使用了<<<<<<< ; ========;>>>>>>> 分别标记出不同分支修改的内容,我们可以打开文件修改成和主分支一致,然后在master | MERGING这个临时分支上进行git commit。

(4)删除分支
git branch -d 分支名

5、分支管理策略
通常我们合并分支的时候,Git一般是用Fast forward模式,这种模式下,删除分支之后,会丢掉分支信息,现在我们来使用-no-ff来禁用Fast forward模式。
(1)创建一个dev分支。
(2)修改README.md内容。
(3)添加到暂存区。
(4)切换回dy分支。
(5)合并dev分支,使用命令git merge -no-ff -m "注释内容" dev
(6)查看历史记录
分支策略:master主分支应该是非常稳定的,也是用来发布的新版本,一般情况下干活都不在master分支上干,都是在新建的分支上,干完之后需要发布,或者说新建分支代码稳定之后可以合并到主分支master上。

(7)隐藏于恢复

隐藏现场:git stash

查看隐藏现场清单:git stash list
恢复的方式有两种:
1)git stash apply,这种恢复方式恢复后stash内容并不删除,需要使用git stash drop来删除。
2)另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。

6、多人协作
当我们从远程库克隆的时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。
(1)查看远程信息git remote
(2)查看远程库详细信息git remote -v
(3)推送分支
推送一个分支就是把该分支上所有本地提交到远程库上,推送的时候要制定本地的分支,Git会把该分支推送到远程库对应的远程分支上:
使用命令:git push origin master 将master分支推送到远程库origin
(4)抓取分支
远程origin库有一个别人提交的dy分支,先本地克隆dy分支,然后本地创建dy分支,本地在dy分支上做开发,现在就可以在dy分支上进行开发,开发完成后,把dy分支推送到远程库中。
git checkout -b dy origin/dy 创建远程origin库dy分支到本地
git push origin dy 开发完成后将提交推送到远程origin库dy分支
(5)拉取更新
如果同一分支上同一文件被不同人修改,推送会提示因为冲突而失败,先拉取更新,然后解决冲突,然后在提交推送
git branch --set-upstream dy origin/dy 指定分支连接
git pull拉取,会进入临时分支 (dy|MERGING)

所以多人协作的工作模式是:
1)可以试图用git push origin branch name推送自己的修改
2)如果推送失败,是因为远程分支比本地更新早,需要先用git pull试图合并。
3)如果合并有冲突,需要解决冲突,并在本地提交,使用git push origin branch name

三、GitLab
1、GitLab与GitHub的区别
都是基于web的代码托管平台,功能类似,GitLab仿照GitHub做的;
GitHub一般用于开源项目,放在互联网上,GitLab一般用于公司内部项目,可以部署在公司内网里服务器上,属于个人版/公司版的GitHub。

2、GitLab搭建(CentOS7)
(1)安装依赖ssh,防火墙,postfix(用于邮件通知),wget

安装SSH:yum install -y curl policycoreutils-python openssh-server
将SSH服务设置成开机自启动:systemctl enable sshd 
启动SSH服务:systemctl start sshd

安装防火墙:yum install firewalld systemd -y
开启防火墙:service firewalld start 
添加http服务到firewalld,pemmanent表示永久生效,若不加--permanent系统下次启动后就会失效:firewall-cmd --permanent --add-service=http
重启防火墙:systemctl reload firewalld

安装Postfix以发送通知邮件:yum install postfix -y
将postfix服务设置成开机自启动:systemctl enable postfix
启动postfix:systemctl start postfix
在安装Postfix期间,可能会出现配置屏幕。选择“Internet Site”并按enter键。使用您的服务器的外部DNS选择“mail name”并按enter。如果出现额外的屏幕,继续按enter键接受默认值。

安装wget:yum -y install wget
安装vim编辑器:yum install vim -y

(2)添加GitLab镜像源并安装gitlab服务器

2.1.添加gitlab镜像
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
2.2.安装gitlab 安装命令:rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
2.3.修改gitlab配置文件指定服务器ip和自定义端口:vim /etc/gitlab/gitlab.rb
2.4.重置并启动GitLab
执行:
gitlab-ctl reconfigure
gitlab-ctl restart 
提示 "ok: run:"表示启动成功

2.5访问 GitLab页面

初始账户: root 密码:5iveL!fe
第一次登录修改密码

 

(3)添加公钥

 

参考:
Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
gitlab搭建与基本使用


3、GitLab使用

参考:GitLab使用教程

参考:
Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
Git详解使用教程
Git使用教程
git详细使用教程

posted @ 2018-10-17 17:02  cac2020  阅读(532)  评论(0编辑  收藏  举报