gitlab

第1章 版本控制系统都能干什么?

自动生成备份

知道改动的地方

随时回滚

第2章 常见的版本控制系统

2.1 git

是一个分布式版本控制系统,在每个使用者的电脑上有一个完整的数据仓库,没有网络依然可以使用git,当然为了习惯及团队协作,会将本地数据同步到git服务器或者github等代码仓库

常见版本管理工具:

2.2 SVN

集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法提交或者备份文件

第3章 环境准备

3.1 git默认最小化安装的时候就已经有了

[root@gitlab ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@gitlab ~]# rpm -qa git

git-1.8.3.1-5.el7.x86_64

[root@gitlab ~]# systemctl status firewalld.service

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

[root@gitlab ~]# getenforce

Disabled

3.2 Git全局配置:

git config --global user.name "dy"

git config --global user.email "[email protected]"

git config --global color.ui true

git config –list

第4章 git常用命令

4.1 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 对象

4.2 常规操作示意图:

1.1 创建git数据仓库

[root@gitlab ~]# mkdir git_data

[root@gitlab ~]# ll

total 4

-rw-------. 1 root root 1347 Mar 12 11:09 anaconda-ks.cfg

drwxr-xr-x  2 root root    6 Mar 20 20:40 git_data

1.2 初始化git目录

[root@gitlab git_data]# git init

Initialized empty Git repository in /root/git_data/.git/

1.3 查看git当前工作状态

[root@gitlab git_data]# git status

# On branch master

#

# Initial commit

#

nothing to commit (create/copy files and use "git add" to track)

1.4 创建数据-提交数据

[root@gitlab git_data]# touch README

[root@gitlab git_data]# ll

total 0

-rw-r--r-- 1 root root 0 Mar 20 20:47 README

[root@gitlab git_data]# git status

# On branch master

#

# Initial commit

#

# Untracked files:

#   (use "git add ..." to include in what will be committed)

#

#   README

nothing added to commit but untracked files present (use "git add" to track)

1.5 把文件上传的暂存区

[root@gitlab git_data]# git add  README

[root@gitlab git_data]# git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

#   (use "git rm --cached ..." to unstage)

#

#   new file:   README

1.6 把暂存区的文件提交的版本库,-m是对文件的说明信息

[root@gitlab git_data]# git commit -m 'jiangboyang'

[master (root-commit) bb1dc0b] jiangboyang

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 README

1.7 如果修改了已经上传到仓库的文件后,可以一步上传到仓库

说明:这里的一步上传到仓库是指已经存在仓库中的文件,修改后,支持这样的操作

[root@gitlab git_data]# echo daya >>test

[root@gitlab git_data]# git status

# On branch master

# Changes not staged for commit:

#   (use "git add ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#   modified:   test

#

no changes added to commit (use "git add" and/or "git commit -a")

[root@gitlab git_data]# git commit -a -m "xiugaiwenjian"

[master 3bd1ed4] xiugaiwenjian

 1 file changed, 1 insertion(+)

[root@gitlab git_data]# git status

# On branch master

nothing to commit, working directory clean

1.8 删除暂存区的数据

[root@gitlab git_data]# git reset HEAD test2

[root@gitlab git_data]# git rm --cached test

rm 'test'

[root@gitlab git_data]# git rm -f test2        删除暂存区文件并且删除源文件

rm 'test2'

[root@gitlab git_data]# ll

total 4

-rw-r--r-- 1 root root 5 Mar 20 20:16 test

1.9 重命名暂存区文件

[root@gitlab git_data]# git mv test test.txt

[root@gitlab git_data]# ll

total 0

-rw-r--r-- 1 root root 0 Mar 20 20:47 README

-rw-r--r-- 1 root root 0 Mar 20 21:01 test.txt

[root@gitlab git_data]# git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD ..." to unstage)

#

#   new file:   test.txt

1.10 查看历史记录

查看历史提交记录

[root@gitlab git_data]# git log

commit bb1dc0bd080f1c2de3fc42a1d3e4a6e16d716422

Author: dy <[email protected]>

Date:   Tue Mar 20 20:51:34 2018 +0800

 

jiangboyang

1.11 查看最近几条提交记录

[root@gitlab git_data]# git log -3

commit bb1dc0bd080f1c2de3fc42a1d3e4a6e16d716422

Author: dy <[email protected]>

Date:   Tue Mar 20 20:51:34 2018 +0800

 

jiangboyang

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哈希字串与提交者的姓名,其他格式见备注。
#→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:

格式

说明

%s

提交说明。

%cd

提交日期。

%an

作者的名字。

%cn

提交者的姓名。

%ce

提交者的电子邮件。

%H

提交对象的完整SHA-1哈希字串。

%h

提交对象的简短SHA-1哈希字串。

%T

树对象的完整SHA-1哈希字串。

%t

树对象的简短SHA-1哈希字串。

%P

父对象的完整SHA-1哈希字串。

%p

父对象的简短SHA-1哈希字串。

%ad

作者的修订时间。

1.12 还原未来数据

什么是未来数据?就是还原到历史数据了,但是你后悔了,想撤销更改,但是git log找不到这个版本了

git reflog    ---查看未来历史的更新点

1.13 还原历史数据

[root@gitlab git_data]# git log                     利用git log查看版本号

commit 3bd1ed4424eb5e66cfc5ce855228a3547e5bef47

Author: dy <[email protected]>

Date:   Tue Mar 20 20:16:46 2018 +0800

 

    xiugaiwenjian

commit 90a7e9ce4469fda8712c0a9cdb39693bd34b92c5

Author: dy <[email protected]>

Date:   Tue Mar 20 20:10:09 2018 +0800

 

    ceshiwenjian_2018.3.21

[root@gitlab git_data]# ll

total 4

-rw-r--r-- 1 root root 5 Mar 20 20:16 test

[root@gitlab git_data]# git reset --hard 90a7e9ce 

HEAD is now at 90a7e9c ceshiwenjian_2018.3.21

[root@gitlab git_data]# cat test

[root@gitlab git_data]# git reset --hard 3bd1ed4424e

HEAD is now at 3bd1ed4 xiugaiwenjian

[root@gitlab git_data]# cat test

daya

1.14 标签使用

[root@gitlab git_data]# git tag v200217        给当前提交内容打一个标签,每次提交都可以打tag

[root@gitlab git_data]# git tag                查看当前所有标签

v200217

[root@gitlab git_data]# git show v200217       查看当前标签详细信息

commit 5f499e63e4db0ce040e0527467a085fe644519b1

Author: dy <[email protected]>

Date:   Wed Mar 21 13:19:56 2018 +0800

 

    xiugai

 

diff --git a/jiang.txt b/jiang.txt

index ba9c1ad..c5e58fc 100644

--- a/jiang.txt

+++ b/jiang.txt

@@ -1 +1,2 @@

 nihao

+888

[root@gitlab git_data]# git reset --hard 8c44f2f   

HEAD is now at 8c44f2f 777

[root@gitlab git_data]# cat jiang.txt

nihao

[root@gitlab git_data]# git reset --hard v200217    

HEAD is now at 5f499e6 xiugai

[root@gitlab git_data]# cat jiang.txt

nihao

888

1.15 对比数据

diff命令可以对比当前文件与仓库已保存文件的区别,从而知道对文件做了哪些修改

[root@gitlab git_data]# cat jiang.txt

nihao

888

[root@gitlab git_data]# echo 666 >>jiang.txt

[root@gitlab git_data]# git diff jiang.txt

diff --git a/jiang.txt b/jiang.txt

index c5e58fc..a232fb5 100644

--- a/jiang.txt

+++ b/jiang.txt

@@ -1,2 +1,3 @@

 nihao

 888

+666

[root@gitlab git_data]#

第2章 分支结构

[root@gitlab git_data]# git branch                      查看当前系统所有分支

* master

[root@gitlab git_data]# git branch linux                创建分支

[root@gitlab git_data]# git branch

  linux

* master

[root@gitlab git_data]# git checkout linux              切换分支

Switched to branch 'linux'

[root@gitlab git_data]# git branch

* linux

  master

[root@gitlab git_data]# git branch -D linux             删除分支

Deleted branch linux (was 5f499e6).

2.1 代码合并:

[root@gitlab git_data]# git merge linux

Updating 90a7e9c..84a289b

Fast-forward

 test | 1 +

 1 file changed, 1 insertion(+)

2.1.1 合并分支时的冲突问题:

[root@gitlab git_data]# git branch

  linux

* master

[root@gitlab git_data]# cat test

linux branch

[root@gitlab git_data]# echo nihao >>test

[root@gitlab git_data]# git commit -a -m "nihao"

[root@gitlab git_data]# git checkout linux

Switched to branch 'linux'

[root@gitlab git_data]# echo buhao >>test    

[root@gitlab git_data]# git commit -a -m "buhao"

[linux c21fd3c] buhao

 1 file changed, 1 insertion(+)

[root@gitlab git_data]# git status

# On branch linux

nothing to commit, working directory clean

[root@gitlab git_data]# git branch

* linux

  master

[root@gitlab git_data]# git checkout master

Switched to branch 'master'

[root@gitlab git_data]# git merge linux

Auto-merging test

CONFLICT (content): Merge conflict in test

Automatic merge failed; fix conflicts and then commit the result.

[root@gitlab git_data]# vim test                      手动解决冲突,只保留想要保留的数据然后保存

[root@gitlab git_data]# git commit  -a -m "hebingshibai"

[master e5092ee] hebingshibai

[root@gitlab git_data]# cat test

linux branch

nihao

第3章 windows客户端使用

windows 上git软件网站 https://git-for-windows.github.io

    软件下载地址:https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe  软件安装默认即可。

第4章 搭建gitlab私有仓库

4.1 安装gitlab,软件比较大,注意内容空间

yum -y localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure  #→初始化,就执行一次
gitlab-ctl status

4.2 在浏览器中输入ip地址进行访问,我这里ip10.0.0.63

1.1 定义项目名称

1.1 创建完成后会提示没有ssh密钥:

在服务端生成密钥对,复制公钥内容粘贴到网页上即可

[root@gitlab ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

84:76:c5:d0:b0:7a:28:b0:e2:0e:12:7c:d7:cf:4d:a4 root@gitlab

The key's randomart image is:

+--[ RSA 2048]----+

|        o=.      |

|       . oo      |

|  .   o +  .     |

|.  o ..=  o      |

|o.....o.SE .     |

|.o. .. .o o      |

|o.       o .     |

|+                |

| .               |

+-----------------+

[root@gitlab ~]# cd /root/.ssh/

[root@gitlab .ssh]# cat id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAGOae1O+UBTUPJNIIgOTdgB0KXT26HhZgh5JFRgau6BifEI34goNMYxNQS5pHiSO6GdHbk+wSi5ZB3Xl9nWYL29zbtSC7TDWEoPlz/FCbk4LXylFF+20MXt0hu+NsBS8xkMk0uyIt4ELEfZ8KO/Ki2zT6aFUJrqmkqxnn9hQyoiOPZv0ewQEYHfgUnXlGkA21arIOL3fMuaLoGcuyeiTEbL2H60nG8N3kC3B/4EcUs18P9rqAKv2A2tMsHoQyzfTRNSHHf1bWnc28oZ4KcQrdIfOQkLQCXMF6Vb9HWmJ01xCdwMiTbcGTQnkudr8bmeJitNnlqIqoZ2sCYsHf52gR root@gitlab

1.1 上传文件到gitlab私有仓库:

[root@gitlab ~]# cd 43team

[root@gitlab 43team]# touch README.md

[root@gitlab 43team]# git add README.md

[root@gitlab 43team]# git commit -m "add README"

[master (root-commit) 9429222] add README

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 README.md

[root@gitlab 43team]# git push -u origin master

Counting objects: 3, done.

Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To [email protected]:root/43team.git

 * [new branch]      master -> master

Branch master set up to track remote branch master from origin.

第2章 什么是github?

github是一个git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,github不仅可以托管各种git版本仓库,还拥有更美观的web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库