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使用教程