• 七 Git版本控制


    把环境准备

    主机名 node1  ip地址10.0.0.11

                 node2             10.0.0.12

                 node3             10.0.0.13

    操作系统centos7 

    在node1中设置主机解析

    10.0.0.11 node1

    10.0.0.12 node2

    10.0.0.13 node3

    文件下载 https://pan.baidu.com/share/init?surl=6m5BVuhBSgtw1-_XTaJdmw 密码 pct9

    =================================================================

    为什么需要做git版本控制

    我们在做某件事的时候,需要很多次才能完成,为了避免不必要的风险在下一次继续做的时候都会

    手动做个一备份,方便有问题时能回滚、对比 找出问题。

    但这样比较麻烦,所以有了git版本控制。

    他可以自动生成备份、知道改动的地方、随时回滚

     常见的版本控制系统

    SVN
    集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,

    所有的使用者无法使用SVN,无法进行提交或备份文件。

    2

    Git
    分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git。

    当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。

    ==========================================================

    git安装与配置

    Git分布式版本控制系统最佳实践 - 老男孩教育博客 http://blog.oldboyedu.com/git/
    系统环境
    CentOS7.4 防火墙和selinux关闭
    安装Git
    yum -y install git

    [root@node1 ~]# git --version
    git version 1.8.3.1

    Git全局配置
    git config --global user.name "zyc" #配置git使用用户
    git config --global user.email "zhangyao@oldboyedu.com" #配置git使用邮箱

    git config --global color.ui true #语法高亮
    git config --list # 查看全局配置

     初始化Git工作目录

    需要管理一个目录需要先初始化

    mkdir git_data
    cd git_data/
    # 初始化 会在目录中生成一个.git的隐藏目录
    git init
    # 查看工作区状态
    git status

     

     

    git_data工作目录  工作目录里的.git/ 目录是本地仓库  本地仓库里的index是暂存区

    touch a.txt
    git status

    文件未被跟踪

    git add a.txt 把文件传到了暂存区  由未跟踪状态到已跟踪状态
    git status

    # git rm --cached a.txt  从缓存区删除 变为未跟踪状态

    # git status

    git commit -m 'first commit' #→git commit提交暂存文件至版本库 从以跟踪状态变为未被修改状态

    以源文件的形式存储 被git管理

     

    删除暂存区数据

    没有添加到暂存区的数据直接rm删除即可。
    已经添加到暂存区数据:
    git rm --cached database
    #→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
    git rm -f database
    #→将文件数据从git暂存区和工作目录一起删除

    ==========================================

    # rm -f b.txt   先删除工作目录的文件

    # git rm --cached b.txt  从追踪列表中移除

     

    # git commit -m 'delete b.txt'  提交生效 从本地仓库删除

     重命名暂存区数据

    没有添加到暂存区的数据直接mv/rename改名即可。
    已经添加到暂存区数据:
    git mv a.txt  ab.txt

    git commit -m "rename a.txt ab.txt"   提交生效

    查看历史记录

    git log #→查看提交历史记录
    git log -2 #→查看最近几条记录
    git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异
    git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,

                          对文件添加或移动的行数,并在最后列出所有增减行的概要信息
    git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息
    git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录
    git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。

     还原历史数据

    1  # echo "333">>ab.txt 修改工作目录的文件

    看状态 可以提交到缓存目录生效,也可以用缓存区的覆盖工作目录进行恢复

    # git checkout -- ab.txt 根据提示覆盖

    # cat ab.txt   恢复到了之前的状态
    123
    222

    2  # echo "333" >>ab.txt

    # git add .  提交到缓存目录

    现在就只有本地仓库的数据是原来的,那就通过仓库进行还原

    # git log --oneline 查看提交仓库的记录

    # git reset --hard  8af7b39  利用版本指针恢复到了最后一次的提交

    Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,

    其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,

    为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,

    另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,

    上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。
    git reset --hard HEAD^ #→还原历史提交版本上一次
    git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

     还原未来数据

    什么是未来数据?就是你还原到历史数据了,但是你后悔了,

    想撤销更改,但是git log已经找不到这个版本了。
    git reflog #→查看未来历史更新点

     然后利用 hard

    标签使用

    前面回滚使用的是一串字符串,又长又难记。
       git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。最近的一次提交打上标签

    # git tag v2.0 9947d1bb245821 给指定的提交记录打上标签

                     

    git tag #→查看当前所有的标签
    git show v1.0 #→查看当前1.0版本的详细信息
    git tag v1.2 -m "version 1.2 release is test" #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
    git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
    [root@centos7 git_data]# git reset --hard 0bdf2e7
    HEAD is now at 0bdf2e7 modified README file
    [root@centos7 git_data]# git reset --hard V1.0
    HEAD is now at a66370a add oldboy dir

    对比数据

    git diff可以对比当前文件与缓存区文件的区别,知道了对README作了什么修改

    # echo '444' >>a.txt

    # git diff

    # gir diff --cached 查看缓存区文件于仓库文件的区别

     

    确认没问题 就提交到仓库

    # git commit -m "modify a.txt second"

    分支结构

    在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,

    平时不要随便直接修改里面的数据文件。
    那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,

    开发完合并到dev分支,最后dev分支合并到master分支。
    所以团队的合作分支看起来会像下图那样。

     

    创建分支

    # git status  默认安装好git时 都是在master分支上操作的

    git branch linux #→创建分支 星号在那个分支上就是 当前分支

    git branch dev

    git checkout dev#→切换分支
    git branch #→查看当前分支情况,当前分支前有*号

    测试在dev分支修改文件并提交到git仓库,最后切换回master分支,你会发现什么呢?

    最终都会指向同一个分支

     

    合并分支

    想把dev的工作成果合并到master分支上
    先切换到master分支
    git merge dev #→合并dev分支至master
    查看合并的文件
    git branch -d dev#→确认合并完成后,可以放心地删除dev分支。

    分支冲突

    合并分支后 两个分支对同一个文件进行修改再次合并就会报错

    修改a.txt

    vim  a.txt  删掉多余的内容 然后提交到缓存和仓库

    # git add .
    # git commit -m "merge dev to master"
    # git status

     

     windows 客户端的使用

    前面讲的都是linux客户端,在讲讲windows客户端使用,安装Git-2.10.0-64-bit。
    windows的git,本质是windows上的linux系统

    安装完成 桌面右键 Git Bash Here 进入命令行界面  操作与linux里的Git 操作一样

    mkdir  git_data

    cd git_data

    git config --global user.name "zhou"

    git config --global user.email "44758635@qq.com"

    git  init

    touch a.txt

    git add .

    git commit -m "commit a.txt"

    或者右键Git  GUI Here

    TortoiseGit-2.2.0.0-64bit 给git加外壳,svn客户端的git版本

    Git服务器 使用 

    前面我们已经知道Git人人都是中心,那他们怎么交互数据呢?
    使用GitHub或者码云等公共代码仓库
    使用GitLab私有仓库

    GitHuB使用

    Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,

    拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,

    Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,

    您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,

    当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。
    具体使用方法见博客http://blog.oldboyedu.com/git/

     

    Git 常用命令

    add #添加文件内容至索引

    bisect #通过二分查找定位引入 bug 的变更

    branch #列出、创建或删除分支

    checkout #检出一个分支或路径到工作区

    clone #克隆一个版本库到一个新目录

    commit #记录变更到版本库

    diff #显示提交之间、提交和工作区之间等的差异

    fetch #从另外一个版本库下载对象和引用

    grep #输出和模式匹配的行

    init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库

    log #显示提交日志

    merge #合并两个或更多开发历史

    mv #移动或重命名一个文件、目录或符号链接

    pull #获取并合并另外的版本库或一个本地分支

    push #更新远程引用和相关的对象

    rebase #本地提交转移至更新后的上游分支中

    reset #重置当前HEAD到指定状态

    rm #从工作区和索引中删除文件

    show #显示各种类型的对象

    status #显示工作区状态

    tag #创建、列出、删除或校验一个GPG签名的 tag 对象

     私有仓库GitLAB

    安装文档 https://about.gitlab.com/downloads/#centos7
    https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
    机器内存给大点
    yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm
    gitlab-ctl reconfigure #→初始化,就执行一次
    gitlab-ctl status/stop/start
    通过浏览器访问页面,设置初始密码,其他操作类似GitHUB。
    账户:root 密码自己设置为12345678

    ===============================

    安装依赖

    # yum install -y curl policycoreutils-python openssh-server

    安装上传的rpm包

    # rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

    安装完成  工作中尽量在全新的服务器上安装 避免端口冲突

    配置

    # vim /etc/gitlab/gitlab.rb

     

    重新配置 生效

    # gitlab-ctl reconfigure

     查看状态

    # gitlab-ctl status  

    13个服务

    run: gitaly: (pid 24137) 299s; run: log: (pid 23849) 373s
    run: gitlab-monitor: (pid 24163) 297s; run: log: (pid 23914) 361s
    run: gitlab-workhorse: (pid 24126) 299s; run: log: (pid 23805) 387s
    run: logrotate: (pid 23834) 379s; run: log: (pid 23833) 379s
    run: nginx: (pid 23817) 385s; run: log: (pid 23816) 385s
    run: node-exporter: (pid 23900) 367s; run: log: (pid 23899) 367s
    run: postgres-exporter: (pid 24184) 295s; run: log: (pid 23999) 342s
    run: postgresql: (pid 23585) 440s; run: log: (pid 23584) 440s
    run: prometheus: (pid 24172) 296s; run: log: (pid 23978) 348s
    run: redis: (pid 23525) 446s; run: log: (pid 23524) 446s
    run: redis-exporter: (pid 23929) 355s; run: log: (pid 23928) 355s
    run: sidekiq: (pid 23789) 393s; run: log: (pid 23788) 393s
    run: unicorn: (pid 23751) 399s; run: log: (pid 23750) 399s

     # netstat -lnupt 占用的端口挺多  所以建议部署在新的服务器上

     

    Gitlab 常用命令

    gitlab-ctl start            启动全部服务

    gitlab-ctl restart         重启全部服务

    gitlab-ctl stop             停止全部服务

    gitlab-ctl reconfigure  生效配置文件

    gitlab-ctl show-config 验证配置文件

    gitlab-ctl uninstall       删除gitlab (保留数据)

    gitlab-ctl cleanse        删除所有数据 重新开始

    gitlab-ctl tail               <查看服务的日志>

     =========================================

    gitlab使用

    浏览器输入服务地址  10.0.0.11  访问Gitlab

    进入登录界面设置密码  然后登录

    linux客户端 生成秘钥 配置到gitlab上 基于ssh方式访问

    # ssh-keygen -t dsa 生成 秘钥

    设置 settings 

    把公钥  复制粘贴到 key 里 点击添加

    创建项目

    进入设置--dashboard仪表盘---new group新组---组名设置为oldboy  其他默认--点击创建

     进入设置--dashboard仪表盘---new user新用户  其他默认

    添加用户到之前创的oldboy组

    组oldboy   用户dev   角色developer开发 

    进入设置--dashboard仪表盘---new project新项目

     组lodboy 项目名web  描述不填 私有项目  添加

    创建的项目加入到了oldboy组里  意味着oldboy组里的成员都能管理这个项目

    根据成员的角色不同而权限也不同

     

    ====================================================================

    项目操作命令等内容

    Command line instructions

    Git global setup
    git config --global user.name "Administrator"
    git config --global user.email "admin@example.com"
    
    Create a new repository  远程仓库克隆到本地仓库中
    git clone git@10.0.0.11:oldboy/web.git 克隆仓库到本地
    cd web 进入本地仓库
    touch README.md  创建文件
    git add README.md 提交到缓存
    git commit -m "add README" 提交到仓库
    git push -u origin master  推送到远程仓库
    Existing folder
    cd existing_folder
    git init
    git remote add origin git@10.0.0.11:oldboy/web.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master
    
    Existing Git repository    把已经存在的本地仓库 git_data 推到 远程仓库中
    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@10.0.0.11:oldboy/web.git 本地创建一个 远程仓库
    # git push -u gitlab master            推送master 分支
    git push -u origin --all git push -u origin --tags

    windows 客户端

    同样       win的客户端也能使用linux简单的命令

    创建ssh秘钥对不能用dsa  要用rsa

     ssh-keygen -t rsa

    登陆之前创建的dev用户  设置好密码,dev设置的开发权限所以没有管理员设置

    给dev用户配置ssh的公钥

    然后把web 仓库克隆到e盘

    git clone git@10.0.0.11:oldboy/web.git

    E盘  也就有了web的 本地仓库

    进入web仓库  右键 Git Gui

    建一个dev分支

    在仓库创建一个文本文档

    gui  刷新 追踪 commit   然后推到远程dev

    现在进入web页面 web仓库就能看到 dev分支和里面的文件

    gitlab 代码提交的流程

    保护master 分支  用root用户 设置禁止dev用户推送数据到master分支

    进入 web仓库 设置仓库保护  只允许master 有权限

    现在master既是默认分支 又是 保护分支

    测试 再次用dev用户往master分支上推送时失败 推送到dev分支 则正常

    当开发完成 代码书写  就申请提交合并到master分支 然后有root用户受理

    ,实现项目的管理

    gitlab  目录

    gitlab_rails['backup_path'] = '/data/backup/gitlab'
    gitlab_rails['backup_keep_time'] = 604800

    mkdir /data/backup/gitlab -p

    chown -R git.root  gitlab/

    /usr/bin/gitlab-rake gitlab:backup:create 备份命令

    查看 backup 生成的备份文件 

    把备份命令加入 定时任务

     

    恢复备份

     

  • 相关阅读:
    机器学习模型评估指标汇总
    Linux 搭建Hadoop集群错误锦集
    机器学习--聚类系列--DBSCAN算法
    机器学习--聚类系列--层次聚类
    机器学习--聚类系列--K-means算法
    数据分析--降维--LDA和PCA
    自然语言处理--Word2vec(一)
    自然语言处理--TF-IDF(关键词提取)
    Android学习笔记之BitmapFactory.Options实现图片资源的加载...
    Android学习笔记之蓝牙通信...
  • 原文地址:https://www.cnblogs.com/cqzhou/p/9268239.html
Copyright © 2020-2023  润新知