zoukankan      html  css  js  c++  java
  • 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:UsersXiaoRui.gitconfig下的配置文件(作用域中等,为登陆这台计算机的用户)。
    git config --system:git config -e --system 会打开D:Program FilesGitetcgitconfig(作用域最大,整台计算机,不管登陆那个帐号,不管哪个项目)

    优先级: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详细使用教程

  • 相关阅读:
    要使用springtest来进行单元测试 否则将无法注入 applicationContext.xml
    关键词的重要性
    发卡可以以交叉方式佩戴来增强可爱性
    红毛类型
    oracle学习总结4
    对springMVC的简单理解
    理解RESTful架构
    项目移植过程中报:“Project facet Java version 1.7 is not supported.” 错误
    svn服务器的搭建
    oracle学习总结3
  • 原文地址:https://www.cnblogs.com/cac2020/p/9805298.html
Copyright © 2011-2022 走看看