Git标签

标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号

持续集成教程.pdf

Git标签操作

设置标签

# -a指定标签名字 -m 指定说明文字 默认设置当前提交的标签
[root@home git_data]# git tag -a v1.0 -m "test v1.0"
# 查看标签
[root@home git_data]# git tag
v1.0
[root@home git_data]# git log --oneline
d8a3eb7 newtest
c48a177 ddd
eb42aad test2
5a78ba7 test1
eb36726 test
a9a90ba 2
d87c2e7 1
77fbe68 1
# 指定某一次的提交为标签
[root@home git_data]# git tag -a v0.1 77fbe68 -m "test v0.1"

查看标签

[root@home git_data]# git tag
v0.1
v1.0

使用标签实现其他功能

# 查看v0.1的信息 git show 加标签查看
[root@home git_data]# git show v0.1
tag v0.1
Tagger: 1997sty <admin@1997sty.com>
Date:   Tue Feb 25 14:41:04 2020 +0800

test v0.1

commit 77fbe689066e42271959bb9682402d27f26253f1
Author: 1997sty <admin@1997sty.com>
Date:   Sat Feb 22 14:31:32 2020 +0800

    1

diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..e69de29
diff --git a/b b/b
new file mode 100644
index 0000000..e69de29
# 跳转到v0.1的标签的提交
[root@home git_data]# git reset --hard v0.1
HEAD 现在位于 77fbe68 1
[root@home git_data]# ll
总用量 0
-rw-r--r-- 1 root root 0 2月  25 14:43 a.txt
-rw-r--r-- 1 root root 0 2月  25 14:43 b
[root@home git_data]# git reset --hard v1.0
HEAD 现在位于 d8a3eb7 newtest
[root@home git_data]# ll
总用量 12
-rw-r--r-- 1 root root 8 2月  25 14:44 a.txt
-rw-r--r-- 1 root root 4 2月  25 14:44 b
-rw-r--r-- 1 root root 0 2月  25 14:44 newtest
-rw-r--r-- 1 root root 5 2月  25 14:44 test

删除标签

[root@home git_data]# git tag -d v0.1
已删除 tag 'v0.1'(曾为 5f7a738)
[root@home git_data]# git tag
v1.0

GitHub

Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业

创建项目

  • 登录以后创建一个新的项目

1.png

  • 已经初始化git,就执行第二部分,没有初始化,就执行第一部分

2.png

#第一部分
echo "# git_data" >> README.md
git init
git add README.md
git commit -m "first commit"
#第二部分
git remote add origin git@github.com:1997sty/git_data.git
git push -u origin master

配置ssh-key

  • 如果没有配置过ssh-key,推送代码会直接报错
[root@home git_data]# git remote add origin git@github.com:1997sty/git_data.git
[root@home git_data]# git push -u origin master
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.


Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  • 生成ssh-key
cd
ssh-keygen -t rsa
#按3次Enter,输入以下命令查看密钥
cat .ssh/id_rsa.pub
  • 右上角头像->Setting->SSH and GPG keys

3.png

  • 获得密钥后复制到github中,添加成功后我收到了github的邮件

4.png

推送新代码到github

#回到git_data,然后再次推送代码
[root@home ~]# git push -u origin master
fatal: Not a git repository (or any of the parent directories): .git
[root@home ~]# cd -
/root/git_data
[root@home git_data]# git push -u origin master
Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts.
Counting objects: 21, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (21/21), 1.50 KiB | 0 bytes/s, done.
Total 21 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To git@github.com:1997sty/git_data.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
  • 查看到代码推送成功

5.jpg

克隆项目到本地

cd
mkdir clone
cd clone
git clone git@github.com:1997sty/git_data.git
  • 查看运行结果
[root@home clone]# git clone git@github.com:1997sty/git_data.git
正克隆到 'git_data'...
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 21 (delta 4), reused 21 (delta 4), pack-reused 0
接收对象中: 100% (21/21), done.
处理 delta 中: 100% (4/4), done.
[root@home clone]# ll
总用量 0
drwxr-xr-x 3 root root 67 2月  25 15:37 git_data
[root@home clone]# tree git_data/
git_data/
├── a.txt
├── b
├── newtest
└── test

0 directories, 4 files

GitLab

GitLab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务.可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理权限和注释.可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库.团队成员可以利用内置的简单聊天程序(Wall)进行交流.它还提供一个代码片段收集功能可以轻松实现代码复用.

安装环境

  1. CentOS 6或者7
  2. 2G内存(实验)生产(至少4G)
  3. 安装包:gitlab-ce-10.2.2-ce
  4. 禁用防火墙,关闭selinux

下载方式

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
#如果下载卡住可以ctrl+c退出执行该命令
wget -c https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

Gitlab的服务构成

  • nginx : 静态web服务器
  • gitlab-workhorse : 轻量级的反向代理服务器
  • logrotate : 日志文件管理工具
  • postgresql : 数据库
  • redis : 缓存数据库
  • sidekiq : 用于在后台异步执行队列任务

相关命令和路径

  • /opt/gitlab/ : 程序安装目录
  • /var/opt/gitlab : 目录数据目录
  • /var/opt/gitlab/git-data : 存放仓库数据
  • gitlab-ctl status : 查看目前gitlab所有服务运维状态
  • gitlab-ctl stop : 停止gitlab服务
  • gitlab-ctl stop nginx : 单独停止nginx服务
  • gitlab-ctl tail : 查看所有服务的日志

安装过程

可以提前安装依赖

yum install -y curl policycoreutils-python openssh-server

使用rpm安装

rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
  • 如果没有安装依赖使用rpm安装会有警告信息
[root@home ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
警告:gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
错误:依赖检测失败:
        policycoreutils-python 被 gitlab-ce-10.2.2-ce.0.el7.x86_64 需要

配置/etc/gitlab/gitlab.rb

  • vim /etc/gitlab/gitlab.rb修改external_url参数
external_url 'http://10.0.0.100'
  • 修改完成后需要执行命令后生效
gitlab-ctl reconfigure

访问gitlab

使用浏览器访问刚才设置的地址,第一次访问会要求你设置root用户的密码

6.jpg

设置完成后会跳转到登录界面

7.jpg

登录成功后会进入首页

8.jpg

设置外观

可以个性化修改页面的logo和标题

9.jpg

注册限制

阻止其他人员注册登录

10.jpg

创建组和用户

进入设置界面,创建组

12.jpg

填入相关信息

11.jpg

创建用户

进入设置界面,创建用户

13.jpg

填入相关信息

14.jpg

点击编辑可以直接设置密码

15.jpg

用户添加到组

进入组

16.jpg

搜索用户并设置等级

17.jpg

设置完成后,添加用户到组

18.jpg

创建项目

进入设置界面,创建项目

19.jpg

项目归属和项目名称,可以把项目给一个组,也可以给一个用户

20.jpg

然后需要设置ssh密钥,点击连接可以直接设置

21.jpg

也可以通过这样的方式设置ssh

22.jpg

设置完成后的项目首页

23.jpg

设置GitLab仓库

由于之前设置过github的远程仓库,先删除origin这个远程仓库

#删除origin远程仓库
git remote remove origin
#查看结果
git remote

添加gitlab远程仓库并推送代码,流程和之前github的相同,之前已经设置过ssh密钥所以可以直接推送代码

[root@home git_data]# git remote add origin git@cdn.home.1997sty.com:gittest/gitpro.git
[root@home git_data]# git push -u origin master 
The authenticity of host 'cdn.home.1997sty.com (115.215.49.71)' can't be established.
ECDSA key fingerprint is SHA256:3Mac83/ji+6E7xYDhQOeopQRNSGR+HcpzoUiFSFvUJs.
ECDSA key fingerprint is MD5:ac:4e:3d:dd:cf:ce:55:51:68:4c:2d:b1:a9:a3:20:b2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdn.home.1997sty.com,115.215.49.71' (ECDSA) to the list of known hosts.
Counting objects: 21, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (21/21), 1.50 KiB | 0 bytes/s, done.
Total 21 (delta 4), reused 0 (delta 0)
To git@cdn.home.1997sty.com:gittest/gitpro.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
  • 推送成功后刷新网页可以看到结果

24.jpg

仓库添加新文件

[root@home git_data]# echo 1997sty > 1997sty
[root@home git_data]# ll
总用量 16
-rw-r--r-- 1 root root 8 2月  28 14:23 1997sty
-rw-r--r-- 1 root root 8 2月  25 14:44 a.txt
-rw-r--r-- 1 root root 4 2月  25 14:44 b
-rw-r--r-- 1 root root 0 2月  25 14:44 newtest
-rw-r--r-- 1 root root 5 2月  25 14:44 test
[root@home git_data]# git add .
[root@home git_data]# git commit -m "1997sty add"
[master 19fc78c] 1997sty add
 1 file changed, 1 insertion(+)
 create mode 100644 1997sty
[root@home git_data]# git push -u origin master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 265 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@cdn.home.1997sty.com:gittest/gitpro.git
   d8a3eb7..19fc78c  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
  • 推送成功后刷新网页可以看到结果

25.jpg

组内其他账号推送代码

项目属于组,组内其他成员也可以抓去和推送修改过后的代码

  • 在另一台主机上第一次操作需要重复之前的操作
  • 登录另一个账号
  • 设置ssh密钥
  • 设置好远程仓库地址
  • 配置邮箱和个人信息
[root@jumpserver ~]# ssh-keygen -t rsa
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:
SHA256:VDV0EPr9LiIH6YvWmfvyTy5BxI7p510wQVJAEDRcqh0 root@jumpserver
The key's randomart image is:
+---[RSA 2048]----+
|         o*O@*+  |
|         ..+o+.  |
|        . E=   . |
|       . oooo.o  |
|        S..o. .o |
|          + o  ..|
|         o * o...|
|        ..B =oo. |
|       .. oOo+o..|
+----[SHA256]-----+
[root@jumpserver ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD377XOx6lYIzphsfbntzM3Tu8EvP6gH83UuQtF7iCZHsoQ+ds8oWjyxWHlG8JhZHR92IYg7VmoT8bnS/Z0jEOMps4taW+0A4y6urZGJEBqULjySDYJ5IETyDesX0IF1WUzcWXbGnXr5nSDHqln/v/EmR0suEtisKVnnS69Y0YUUn/IftYyiI60w5kO20AScoGu4/oZ37+xqCmp+rqnOLjK9b9oLBSK/AP5lk3oJHBhTS0frwgo0+kvDxqcujyEH829DvYmtes5XsP1Nvvf+iVbzAV0PHkzPgV7MeVOT7uAouuUAsqDDsIVo8JChKNs3GFcfeGr4S3e4xUdLQAwBCgT root@jumpserver
[root@jumpserver ~]# git clone git@cdn.home.1997sty.com:gittest/gitpro.git
正克隆到 'gitpro'...
The authenticity of host 'cdn.home.1997sty.com (115.215.49.71)' can't be established.
ECDSA key fingerprint is SHA256:3Mac83/ji+6E7xYDhQOeopQRNSGR+HcpzoUiFSFvUJs.
ECDSA key fingerprint is MD5:ac:4e:3d:dd:cf:ce:55:51:68:4c:2d:b1:a9:a3:20:b2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdn.home.1997sty.com,115.215.49.71' (ECDSA) to the list of known hosts.
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 24 (delta 5), reused 0 (delta 0)
接收对象中: 100% (24/24), done.
处理 delta 中: 100% (5/5), done.
[root@jumpserver ~]# ll gitpro/
总用量 16
-rw-r--r-- 1 root root 8 2月  28 14:37 1997sty
-rw-r--r-- 1 root root 8 2月  28 14:37 a.txt
-rw-r--r-- 1 root root 4 2月  28 14:37 b
-rw-r--r-- 1 root root 0 2月  28 14:37 newtest
-rw-r--r-- 1 root root 5 2月  28 14:37 test

上面省略了添加ssh密钥的截图,接下来就是修改代码然后再次上传

[root@jumpserver ~]# cd gitpro/
[root@jumpserver gitpro]# echo test1 > test1
[root@jumpserver gitpro]# ll
总用量 20
-rw-r--r-- 1 root root 8 2月  28 14:37 1997sty
-rw-r--r-- 1 root root 8 2月  28 14:37 a.txt
-rw-r--r-- 1 root root 4 2月  28 14:37 b
-rw-r--r-- 1 root root 0 2月  28 14:37 newtest
-rw-r--r-- 1 root root 5 2月  28 14:37 test
-rw-r--r-- 1 root root 6 2月  28 14:40 test1
[root@jumpserver gitpro]# git add .
[root@jumpserver gitpro]# git commit -m "test1"
#第一次上传到本地仓库会要求你设置邮箱和名称

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@jumpserver.(none)')
[root@jumpserver gitpro]# git config --global user.email "jumpserver@example.com"
[root@jumpserver gitpro]# git config --global user.name "jumperserver"
[root@jumpserver gitpro]# git commit -m "test1"
[master e7ccb7b] test1
 1 file changed, 1 insertion(+)
 create mode 100644 test1
#推送代码到远程仓库
[root@jumpserver gitpro]# git push -u origin master 
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@cdn.home.1997sty.com:gittest/gitpro.git
   19fc78c..e7ccb7b  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
  • 推送成功后刷新网页可以看到结果

26.jpg

gitlab分支

在网页上设置分支保护

27.jpg

对代码进行改动后推送到远程仓库

[root@jumpserver gitpro]# echo branch > testbranch
[root@jumpserver gitpro]# git add .
[root@jumpserver gitpro]# git commit -m "branch"
[master bcae6a2] branch
 1 file changed, 1 insertion(+)
 create mode 100644 testbranch
[root@jumpserver gitpro]# git push -u origin master 
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To git@cdn.home.1997sty.com:gittest/gitpro.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: 无法推送一些引用到 'git@cdn.home.1997sty.com:gittest/gitpro.git'

由于master分支保护无法推送代码到远程仓库,提示remote: GitLab: You are not allowed to push code to protected branches on this project.

使用开发账户创建分支并推送

[root@jumpserver gitpro]# git branch dev
[root@jumpserver gitpro]# git push -u origin dev 
Total 0 (delta 0), reused 0 (delta 0)
remote: 
remote: To create a merge request for dev, visit:
remote:   http://cdn.home.1997sty.com:82/gittest/gitpro/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To git@cdn.home.1997sty.com:gittest/gitpro.git
 * [new branch]      dev -> dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。

在分支中添加一个新文件,使分支和主线不同

[root@jumpserver gitpro]# echo branch > testbranch
[root@jumpserver gitpro]# git add .
[root@jumpserver gitpro]# git commit -m "hebing"
[dev cfef6c3] hebing
 1 file changed, 1 insertion(+)
 create mode 100644 testbranch
[root@jumpserver gitpro]# git push -u origin dev
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: 
remote: To create a merge request for dev, visit:
remote:   http://cdn.home.1997sty.com:82/gittest/gitpro/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To git@cdn.home.1997sty.com:gittest/gitpro.git
   e7ccb7b..cfef6c3  dev -> dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
  • 推送成功后刷新网页可以看到结果

分支,有新增加的文件

29.jpg

主线,没有新增加的文件

28.jpg

在test1帐号上创建分支合并请求

31.jpg

填写相关内容后提交

30.jpg

root账户上查看请求

32.jpg

可以选择合并分支

33.jpg

分支消失,分支和主线合并

34.jpg

gitlab汉化

#下载汉化补丁
git clone https://gitlab.com/xhang/gitlab.git
#查看全部分支版本
git branch -a
#对比版本生成补丁包
git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > /tmp/10.2.2-zh.diff
#停止服务器
gitlab-ctl stop
#打补丁
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff 
#启动和重新配置
gitlab-ctl start
gitlab-ctl reconfigure