版本控制

版本控制简介

  • version control system
  • revision control system(修订控制系统)
  • 开发工具,但不限于源码文件
  • 记录文件的每次变更
  • 随时可以回到历史状态
  • 文件及元数据的变更(修改人\修改理由\具体修改内容\时间戳)
  • 配置文件是除数据之外第二大资产
  • 团队协作
  • centralized version control systems (CVCS)
    • 集中存储修改 , 颗粒控制, 但是单点故障隐患
    • CVS / Subversion
  • distributed version control systems (DVCS)
    • 分布式存储的完整拷贝
    • git / mercurial / bazaar
    • 每个人维护本地库, 完成后上传到服务器
  • 指针指向当前最新版本
  • 随着回滚还原历史版本

Git

  • 最初由李纳斯开发 (Linux内核创始者)
  • Git作为开发工具而生
  • 适合大型项目的版本管理(源码版本管理)
  • GIt库保存所有程序员的团队成果
  • Git默认使用openssh
  • 服务器上git用户需要能够修改目录(库)
  • 一个库就是一个文件夹 (库配置信息 .git目录)
  • 无需独立的专职服务器, 满足存储空间需求可共用

git系统库安装

1
2
3
4
5
6
sudo apt install git
mkdir /git
chown cwz:cwz /git
cd /git
git init --bare apache2 # 空的框架库,不存在数据, 初始化
/var/log/auth.log # ssh 登录问题诊断

git简单使用

git安装

  • 使用PPA库安装

    1
    2
    3
    4
    sudo add-apt-repository ppa:git/core/ppa
    sudo apt update
    sudo apt install git
    git version # 版本比ubuntu官方库新
  • 使用:

    1
    2
    3
    4
    5
    6
    7
    git config --global user.name "Your Name"
    git config --global user.email "Your email"

    git config --list # 查看配置的信息
    git help -a -g # 查看git所有命令

    git help everyday # man giteveryday

git客户端安装

与服务端安装一样

连接服务器:

1
2
3
4
git clone cwz@172.16.216.129:/git/web   # 获取服务器的库

ls -a # 查看git库的信息
# 其中有一个.git文件夹, .git目录存放配置信息(使目录成为git库), 删除此目录.git 就是一个普通目录. 其中config文件包含远程服务器地址信息

git常用命令

git status

1
2
3
4
5
6
cwz@U  ~/git/web   master  git status 
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

git add . 或者git add filename

1
2
3
将当前文件加入到git管理追踪的状态下,  当前文件的变更都会被git记录
或者
单独将一个文件 加入到git管理下

git commit -a -m "描述" 提交变更 本地库变更

1
2
3
git commit  提交文件,   -a 表示将所有文件都提交,   -m 描述信息

执行git commit 把变更信息提交到了git本地库

每次文件变更信息,都要执行git commit -a -m "描述", 才会保存版本更新记录

可以管理本地文件的修改

举个例子: apache配置文件版本管理

1
2
3
4
5
6
7
8
cp -rp /etc/apache2 /etc/apache2.bak        # 备份apache2
mv /etc/apache2/* /git/apache2/ # 把apache2所有文件移动到git管理下
rm /etc/apache2 # 删除原先的apache2配置
find /git/apache2 -name '.?*' -prune -o -exec chown root:root {} +
# 将拷贝过来的apache2目录下除了.git文件 的所有文件的属主 和 属组都改为root

ln -s /git/apache2 /etc/apache2 # 做一个软连接, 将git下的apache2链接到原来的配置目录
systemctl reload apache2 # 重启apache服务

本地同步到服务器

1
2
3
git push origin master   

# 使用git push有个前提, 你的本地文件必须要和服务器上文件一致,才能push 成功, push之前可以使用 git pull 从服务器上更新, 再进行push

从服务器更新

1
2
git pull
# 服务端数据存储结构与客户端不同 (数据库)

撤销文件的变更

1
2
3
4
5
git checkout file
git diff index.html

当修改了文件,没有同步到服务器,发现有问题, 可以先用 git diff 文件 来比较与原来文件有那些不同
git checkout 文件 赶紧回退到 之前的版本

安装tig查看文件变更

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo apt install tig

tig查看,如下:
2019-12-22 13:32 setcreed o [master] {origin/master} 新曾源码d
2019-12-22 13:32 setcreed o 新曾源码c
2019-12-22 13:31 setcreed o 新曾文件a\b
2019-12-21 23:00 setcreed o 新增配置文件2.conf
2019-12-21 22:34 setcreed o 修改了1.conf
2019-12-21 22:31 setcreed I 新增配置文件1.conf


回退到c版本:
tig 命令, 上下键选择要回退的版本, 都有对应的hash值, 按下回车可以看到具体信息

git checkout 3d8e73f293772409754035d286815ad7fac48ca7
切回到 那个时间点, 但那并不意味着 之前的版本就不见了,只是像指针一样, 只是临时改变了时间节点, 让你看不到其他的时间节点下的文件

git checkout master 就可以切回到之前的节点,看到之前的文件, 确定一下看看有没有问题, 没有问题我就真的回滚了.


回滚是 回滚这一版本产生的变更, 对它之后的版本是没有影响的
git revert master 3d8e73f293772409754035d286815ad7fac48ca7 --no-commit
git commit -a -m '回滚'
git push origin master

搭建gitlab服务器

gitlab

  • 命令行的git灵活强大, 但人们还是偏爱图形化

  • gitlab是开源的git库 web界面 (包含团队协作工具 gitlab mattermost )

  • 基于Ruby 语言开发的web应用程序

  • 所有组件全部打包集成 postgresql redis nginx logrotate sidekiq unicorn

  • 要支持MySQL数据库, 社区版需要手动安装

安装使用:

1
2
3
4
社区版: https://packages.gitlab.com/gitlab/gitlab-ce

curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt install gitlab-ce
  • 配置:

    sudo gitlab-ctl reconfigure

一些命令

  • 状态

    1
    sudo gitlab-ctl status
  • 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /etc/gitlab/gitlab.rb      # 配置文件

    # 配置文件参数:
    external_url # 指定访问域名https://lab.com
    letsencrypt集成 # 生成证书
    database # 指定外部postgresql数据库
    email # 设置出站邮件服务器
    sudo gliab-ctl reconfigure # 每次配置修改都需要重新运行该命令
    gitlab-clt show-config # 显示已经启用的配置
  • 浏览器访问

    • 设置初始化root账号密码

常用命令

1
2
3
4
5
6
sudo gitlab-ctl start        # 启动gitlab
sudo gitlab-ctl stop # 停止gitlab
sudo gitlab-ctl restart # 重启
sudo gitlab-ctl tail # 查看所有日志
sudo gitlab-ctl tail nginx/gilab_acces.log # 查看nginx访问日志
sudo gitlab-ctl tail postgresql # 查看postgresql日志

创建用户 创建库(project)

默认用户可创建10000个库(project)