持续集成-Git
DevOps是什么
是一种理念,规范过程、开发与运维共同协作的方式、工具、生产环境
DevOps能干什么
- 自动化测试
- 持续集成
- 代码质量管理工具
DevOps如何实现
架构规划–>代码的存储–>构建、测试、预生产、部署、监控
Git版本控制系统
版本控制系统简介
版本控制系统是一种记录或若干个文件内容的变化
记录文件的所有历史变化
随时可恢复到任何一个历史状态
多人协作开发
Git安装
- 安装git,并配置用户
[root@192 ~]# yum install git
[root@192 ~]# git config --global user.name "kaifa"
#配置git使用用户
[root@192 ~]# git config --global user.email "kaifa@mail.com"
#配置git使用邮箱
[root@192 ~]# git config --global color.ui true
#配置语法高亮
[root@192 ~]# git config --list
user.name=kaifa
user.email=kaifa@mail.com
color.ui=true
- git初始化
[root@192 ~]# mkdir data
[root@192 data]# cd data
[root@192 data]# git init
Initialized empty Git repository in /root/data/.git/
#初始化仓库,把一个目录初始化为版本仓库(可以是空的目录,也可以是带内容的目录)
[root@192 data]# git status #查看一个仓库的状态
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
[root@192 data]# cd .git/
[root@192 .git]# ll
total 12
drwxr-xr-x. 2 root root 6 Jan 4 21:24 branches #分支目录
-rw-r--r--. 1 root root 92 Jan 4 21:24 config #定义项目特有的配置选项
-rw-r--r--. 1 root root 73 Jan 4 21:24 description #仅供git web程序使用
-rw-r--r--. 1 root root 23 Jan 4 21:24 HEAD #指示当前的分支
drwxr-xr-x. 2 root root 242 Jan 4 21:24 hooks #git钩子文件
drwxr-xr-x. 2 root root 21 Jan 4 21:24 info #一个全局排除文件
drwxr-xr-x. 4 root root 30 Jan 4 21:24 objects #存放所有的数据内容,有info和pack两个子文件夹
drwxr-xr-x. 4 root root 31 Jan 4 21:24 refs #存放指向数据的提交对象的指针
-rw-r--r--. 1 root root 96 Jan 4 21:38 index #暂存区刚刚开始创建时没有
git常规使用
git基础命令
[root@192 data]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
[root@192 data]# touch a b c
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# a
# b
# c
nothing added to commit but untracked files present (use "git add" to track)
添加文件
[root@192 data]# git add a
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
# c
添加所有的文件到暂存区,git add .或者git add *
[root@192 data]# git add .
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
# new file: b
# new file: c
#
将c文件撤回,先撤回文件后,可以直接删除c文件
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
# new file: b
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# c
[root@192 data]# rm -rf c
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
# new file: b
#
同时删除工作目录和暂存区的文件
[root@192 data]# git rm -f b
rm 'b'
[root@192 data]# ls
a
[root@192 data]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
#
将暂存区的文件添加到本地仓库
[root@192 data]# git commit -m "add newfile a"
[master (root-commit) c780bfd] add newfile a
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
如何真正意义上通过版本控制系统管理文件
1、工作目录有文件
2、将文件添加到暂存区域
3、再通过git commit添加到本地仓库
修改文件名
[root@192 data]# git mv a a.txt
[root@192 data]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: a -> a.txt
#
[root@192 data]# git commit -m "mv a a.txt"
[master e0e9836] mv a a.txt
1 file changed, 0 insertions(+), 0 deletions(-)
rename a => a.txt (100%)
git diff默认比对工作目录和暂存区有什么不同
[root@192 data]# echo 123 > a.txt
[root@192 data]# git diff
diff --git a/a.txt b/a.txt
index e69de29..190a180 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1 @@
+123
git diff - -cached比对暂存区和本地仓库
[root@192 data]# git add a.txt
[root@192 data]# git diff
[root@192 data]# git diff --cached
diff --git a/a.txt b/a.txt
index e69de29..190a180 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1 @@
+123
[root@192 data]# git commit -m "add 123"
[master 05a3bd4] add 123
1 file changed, 1 insertion(+)
[root@192 data]# git diff --cached
如果某个文件已经被仓库管理,如果更改此文件,直接需要一条命令提交即可
[root@192 data]# vim a.txt
[root@192 data]# echo 789 >> a.txt
[root@192 data]# git commit -am "add 456789"
[master 2840c4b] add 456789
1 file changed, 2 insertions(+)
查看历史操作内容
[root@192 data]# git log
commit 2840c4b94cb8d83f923c2de576f00a4e844f38d1
Author: kaifa <kaifa@mail.com>
Date: Tue Jan 4 22:12:35 2022 +0800
add 456789
commit 05a3bd4b4cb74504c7d15ffc8491da9c42e93883
Author: kaifa <kaifa@mail.com>
Date: Tue Jan 4 22:09:59 2022 +0800
add 123
commit e0e9836d6d18b85fef02664e18a08b5047056cb8
Author: kaifa <kaifa@mail.com>
Date: Tue Jan 4 22:01:50 2022 +0800
mv a a.txt
commit c780bfd48400943a1ce899cd5fd48e3c76521fda
Author: kaifa <kaifa@mail.com>
Date: Tue Jan 4 21:51:24 2022 +0800
add newfile a
一行简单的显示commit信息
[root@192 data]# git log --oneline
2840c4b add 456789
05a3bd4 add 123
e0e9836 mv a a.txt
c780bfd add newfile a
显示当前的指针指向哪里
[root@192 data]# git log --oneline --decorate
2840c4b (HEAD, master) add 456789
05a3bd4 add 123
e0e9836 mv a a.txt
c780bfd add newfile a
回滚数据,将数据恢复到a
[root@192 data]# git reset --hard c780bfd
HEAD is now at c780bfd add newfile a
[root@192 data]# git log --oneline --decorate
c780bfd (HEAD, master) add newfile a
[root@192 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 4 22:21 a
再回去到添加456789
[root@192 data]# git reset --hard 2840c4b
HEAD is now at 2840c4b add 456789
[root@192 data]# git log --oneline --decorate
2840c4b (HEAD, master) add 456789
05a3bd4 add 123
e0e9836 mv a a.txt
c780bfd add newfile a
查看所有的操作
[root@192 data]# git reset --hard c780bfd
HEAD is now at c780bfd add newfile a
[root@192 data]# git log --oneline --decorate
c780bfd (HEAD, master) add newfile a
[root@192 data]# git reflog
c780bfd HEAD@{0}: reset: moving to c780bfd
2840c4b HEAD@{1}: reset: moving to 2840c4b
c780bfd HEAD@{2}: reset: moving to c780bfd
2840c4b HEAD@{3}: commit: add 456789
05a3bd4 HEAD@{4}: commit: add 123
e0e9836 HEAD@{5}: commit: mv a a.txt
c780bfd HEAD@{6}: commit (initial): add newfile a
Git分支
分支是平行空间,假设为某个手机研发一个新的功能,代码已经完成了80%,但是如果这个不完整代码直接提交到git仓库中,可能会影响到其他人,再项目上可以创建一个分支,这个分支只属于你自己,其他人看不到,等代码编写完成后再与原来项目的主分支合并即可,这样保证代码不丢失,又不影响他人工作。
一般项目中保证master分支是非常稳定的,仅用于发布新版本,工作时创建不同的分支,等工作完成后合并到master分支上面。
查看当前指针的指向
[root@192 data]# git log --oneline --decorate
c780bfd (HEAD, master) add newfile a
创建新的分支
[root@192 data]# git branch testing
[root@192 data]# git branch #查看分支,*标识在哪个分支上
* master
testing
[root@192 data]# touch aaa bbb ccc
[root@192 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 4 22:25 a
-rw-r--r--. 1 root root 0 Jan 5 20:16 aaa
-rw-r--r--. 1 root root 0 Jan 5 20:16 bbb
-rw-r--r--. 1 root root 0 Jan 5 20:16 ccc
[root@192 data]# git add aaa
[root@192 data]# git commit -m "add aaa"
[master 80a4cb4] add aaa
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 aaa
[root@192 data]# git add bbb
[root@192 data]# git commit -m "add bbb"
[master 092226e] add bbb
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bbb
[root@192 data]# git add ccc
[root@192 data]# git commit -m "add ccc"
[master 816b79f] add ccc
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ccc
[root@192 data]# git log --oneline --decorate
816b79f (HEAD, master) add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd (testing) add newfile a
切换到测试分支
[root@192 data]# git checkout testing
Switched to branch 'testing'
[root@192 data]# git branch
master
* testing
删除分支
[root@192 data]# git checkout master
Switched to branch 'master'
[root@192 data]# git branch -d testing
Deleted branch testing (was c780bfd).
创建并切换到testing分支
[root@192 data]# git checkout -b testing
Switched to a new branch 'testing'
[root@192 data]# git branch
master
* testing
在testing分支添加一个文件
[root@192 data]# touch test-ddd
[root@192 data]# git add .
[root@192 data]# git commit -m "add newfile test-ddd"
[testing fc1edfd] add newfile test-ddd
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test-ddd
[root@192 data]# git log --oneline --decorate
fc1edfd (HEAD, testing) add newfile test-ddd
816b79f (master) add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
在master添加一个文件
[root@192 data]# git checkout master
Switched to branch 'master'
[root@192 data]# git branch
* master
testing
[root@192 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 4 22:25 a
-rw-r--r--. 1 root root 0 Jan 5 20:26 aaa
-rw-r--r--. 1 root root 0 Jan 5 20:26 bbb
-rw-r--r--. 1 root root 0 Jan 5 20:26 ccc
[root@192 data]# git log --oneline --decorate
816b79f (HEAD, master) add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
[root@192 data]# touch master-eee
[root@192 data]# git add master-eee
[root@192 data]# git commit -am "add master-eee"
[master 7696f79] add master-eee
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 master-eee
[root@192 data]# git log --oneline --decorate
7696f79 (HEAD, master) add master-eee
816b79f add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
在master分支中没有test分支的文件,在test分支中也没有master分支的文件,由此可见两个分支互不影响
合并testing分支到master
[root@192 data]# git merge testing
[root@192 data]# git log --oneline --decorate
35abd30 (HEAD, master) Merge branch 'testing' Merge branch 'testing'
7696f79 add master-eee
fc1edfd (testing) add newfile test-ddd
816b79f add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
[root@192 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 4 22:25 a
-rw-r--r--. 1 root root 0 Jan 5 20:26 aaa
-rw-r--r--. 1 root root 0 Jan 5 20:26 bbb
-rw-r--r--. 1 root root 0 Jan 5 20:26 ccc
-rw-r--r--. 1 root root 0 Jan 5 20:35 master-eee
-rw-r--r--. 1 root root 0 Jan 5 20:41 test-ddd
#删除testing分支
[root@192 data]# git branch -d testing
Deleted branch testing (was fc1edfd).
Git代码冲突合并
在master分支aaa中插入数据
[root@192 data]# git branch testing
[root@192 data]# echo master >> aaa
[root@192 data]# git commit -am "master >> aaa"
[master 2f0f900] master >> aaa
1 file changed, 1 insertion(+)
[root@192 data]# git status
# On branch master
nothing to commit, working directory clean
[root@192 data]# cat aaa
master
在testing分支aaa中插入数据
[root@192 data]# git checkout testing
Switched to branch 'testing'
[root@192 data]# cat aaa
[root@192 data]# echo testing >> aaa
[root@192 data]# git commit -am "testing >> aaa"
[testing 70754df] testing >> aaa
1 file changed, 1 insertion(+)
[root@192 data]# cat aaa
testing
合并分支
[root@192 data]# git merge testing
Auto-merging aaa
CONFLICT (content): Merge conflict in aaa
Automatic merge failed; fix conflicts and then commit the result.
[root@192 data]# cat aaa
<<<<<<< HEAD
master
=======
testing
>>>>>>> testing
vim手动处理aaa中的数据,重新上传
[root@192 data]# vim aaa
[root@192 data]# cat aaa
master
testing
[root@192 data]# git commit -am "merge testing"
[master cb83e8e] merge testing
[root@192 data]# git status
# On branch master
nothing to commit, working directory clean
[root@192 data]# cat aaa
master
testing
Git标签的使用
给合并testing分支上打上v1.0标签
[root@192 data]# git log --oneline
cb83e8e merge testing
70754df testing >> aaa
2f0f900 master >> aaa
35abd30 Merge branch 'testing' Merge branch 'testing'
7696f79 add master-eee
fc1edfd add newfile test-ddd
816b79f add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
[root@192 data]# git tag -a v1.0 35abd30 -m "add testing branch v1.0"
[root@192 data]# git tag
v1.0
[root@192 data]# git show v1.0
tag v1.0
Tagger: kaifa <kaifa@mail.com>
Date: Wed Jan 5 21:12:20 2022 +0800
add testing branch v1.0
commit 35abd3008366fa864203a080221412c129873eb5
Merge: 7696f79 fc1edfd
Author: kaifa <kaifa@mail.com>
Date: Wed Jan 5 20:41:17 2022 +0800
Merge branch 'testing'
Merge branch 'testing'
回滚到v1.0
[root@192 data]# git reset --hard v1.0
HEAD is now at 35abd30 Merge branch 'testing'
[root@192 data]# git log --oneline
35abd30 Merge branch 'testing' Merge branch 'testing'
7696f79 add master-eee
fc1edfd add newfile test-ddd
816b79f add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
对当前版本打上标签
[root@192 data]# git reset --hard cb83e8e
HEAD is now at cb83e8e merge testing
[root@192 data]# git log --oneline
cb83e8e merge testing
70754df testing >> aaa
2f0f900 master >> aaa
35abd30 Merge branch 'testing' Merge branch 'testing'
7696f79 add master-eee
fc1edfd add newfile test-ddd
816b79f add ccc
092226e add bbb
80a4cb4 add aaa
c780bfd add newfile a
[root@192 data]# git tag -a v2.0 -m "xxx"
[root@192 data]# git tag
v1.0
v2.0
删除v2.0标签
[root@192 data]# git tag -d v2.0
Deleted tag 'v2.0' (was 7126aac)
[root@192 data]# git tag
v1.0
GitHub使用
GitHab是一个Git版本库的托管服务,时全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,GitHub不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,代码文件会被共享出来。也可以购买私有库。
1、注册用户
2、配置ssh-key
3、创建项目
4、克隆项目到本地
5、推送新代码到github
登录自己的githab
在githab上创建一个公有的仓库
配置仓库信息,我这里其实没有勾选add readme
根据提示本地的仓库
[root@192 data]# git remote add origin02 git@github.com:Xcnnnnnnn/gitdata.git
[root@192 data]# git remote
origin02
和github做ssh免密
[root@192 data]# git push -u origin02 master
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
ECDSA key fingerprint is MD5:7b:99:81:1e:4c:91:a5:0d:5a:2e:2e:80:13:3f:24:ca.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Counting objects: 24, done.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (24/24), 1.85 KiB | 0 bytes/s, done.
Total 24 (delta 8), reused 0 (delta 0)
remote: Resolving deltas: 100% (8/8), done.
To git@github.com:Xcnnnnnnn/gitdata.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin02.
如何拉取项目
[root@192 tmp]# git clone git@github.com:Xcnnnnnnn/gitdata.git
Cloning into 'gitdata'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 24 (delta 8), reused 24 (delta 8), pack-reused 0
Receiving objects: 100% (24/24), done.
Resolving deltas: 100% (8/8), done.
Gitlab
安装
- 官网下载gitlab
https://about.gitlab.com/install/#centos-7
清华源的地址
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
- 安装依赖包
yum install -y curl policycoreutils-python openssh-server perl
- 安装gitlab
[root@localhost ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
- 配置gitlab的url
vim gitlab.rb
external_url 'https://192.168.168.133'
#修改成自己的IP
gitlab-ctl reconfigure
- 检查服务是否启动
[root@192 data]# gitlab-ctl status
run: gitaly: (pid 4137) 19s; run: log: (pid 3643) 70s
run: gitlab-monitor: (pid 4152) 18s; run: log: (pid 3813) 58s
run: gitlab-workhorse: (pid 4125) 19s; run: log: (pid 3470) 88s
run: logrotate: (pid 3577) 76s; run: log: (pid 3576) 76s
run: nginx: (pid 3530) 82s; run: log: (pid 3529) 82s
run: node-exporter: (pid 3723) 64s; run: log: (pid 3722) 64s
run: postgres-exporter: (pid 4172) 17s; run: log: (pid 4019) 40s
run: postgresql: (pid 3089) 132s; run: log: (pid 3088) 132s
run: prometheus: (pid 4162) 17s; run: log: (pid 3947) 46s
run: redis: (pid 2966) 138s; run: log: (pid 2965) 138s
run: redis-exporter: (pid 3895) 52s; run: log: (pid 3894) 52s
run: sidekiq: (pid 3412) 94s; run: log: (pid 3411) 94s
run: unicorn: (pid 3342) 100s; run: log: (pid 3341) 100s
gitlab-ctl status #查看目前gitlab的程序安装目录
gitlab-ctl stop #停止gitlab服务
gitlab-ctl stop nginx #停止gitlab某个服务
gitlab-ctl reconfigure #更改配置文件后需重新配置
/opt/gitlab/ #gitlab程序安装目录
/var//opt/gitlab/ #gitlab数据目录
/var//opt/gitlab/ git-data #存放仓库数据
初次登录配置
- 登录到gitlab界面,初次登录设置一个密码,之后输入用户名root登录
- 设置一个logo和登录信息
创建一个项目
- 创建一个组
设置一个名字
- 创建一个项目
设置ssh-key
- 点击新建ssh-公钥
- 添加key
上传代码到gitlab
- 进入本地目录,推送文件
[root@192 data]# git remote add origin git@192.168.168.133:test/git_data.git
[root@192 data]# git push -u origin master
The authenticity of host '192.168.168.133 (192.168.168.133)' can't be established.
ECDSA key fingerprint is SHA256:2Np9pq2OINZa2270AFShbG3rCfSLZQtfyVZHW4v1RaU.
ECDSA key fingerprint is MD5:29:9e:ad:bc:b9:e6:d5:93:07:01:b0:40:07:d6:57:50.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.168.133' (ECDSA) to the list of known hosts.
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.168.133:test/git_data.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
- 推送新文件
[root@192 data]# touch test.txt
[root@192 data]# git add test.txt
[root@192 data]# git commit -m "add test.txt"
[master 5e66818] add test.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt
[root@192 data]# git push -u origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 243 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@192.168.168.133:test/git_data.git
f1c769c..5e66818 master -> master
Branch master set up to track remote branch master from origin.
新添加一个用户
- 关闭自动注册
- 新建用户
- 编辑用户信息
- 登录dev用户,设置一个新密码
- 将dev用户添加到test组中
进入test组
- 查看dev用户
将项目拉到本地目录
- dev用户添加ssh-key
- 复制ssh的地址
- 下载
[root@192 ~]# git clone git@192.168.168.133:test/git_data.git
Cloning into 'git_data'...
The authenticity of host '192.168.168.133 (192.168.168.133)' can't be established.
ECDSA key fingerprint is SHA256:2Np9pq2OINZa2270AFShbG3rCfSLZQtfyVZHW4v1RaU.
ECDSA key fingerprint is MD5:29:9e:ad:bc:b9:e6:d5:93:07:01:b0:40:07:d6:57:50.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.168.133' (ECDSA) to the list of known hosts.
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (5/5), done.
Resolving deltas: 100% (1/1), done.
- 创建一个新的功能,并推送
记得git config --global设置一个全局变量
[root@192 git_data]# touch newfile.txt
[root@192 git_data]# git add newfile.txt
[root@192 git_data]# git commit -m "add newfile.txt"
[master 039134e] add newfile.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 newfile.txt
[root@192 git_data]# git push -u origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 232 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@192.168.168.133:test/git_data.git
5e66818..039134e master -> master
Branch master set up to track remote branch master from origin.
- 创建一个分支,不能直接推送到master上
[root@192 git_data]# git checkout -b dev
Switched to a new branch 'dev'
[root@192 git_data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 7 04:40 aaa
-rw-r--r--. 1 root root 0 Jan 7 04:40 bbb
-rw-r--r--. 1 root root 0 Jan 7 04:40 ccc
-rw-r--r--. 1 root root 0 Jan 7 04:40 newfile.txt
-rw-r--r--. 1 root root 0 Jan 7 04:40 test.txt
[root@192 git_data]# git branch
* dev
master
[root@192 git_data]# 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://192.168.168.133/test/git_data/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To git@192.168.168.133:test/git_data.git
* [new branch] dev -> dev
Branch dev set up to track remote branch dev from origin.
查看已经有dev分支
分支保护
测试
[root@192 git_data]# touch dddd
[root@192 git_data]# git add .
[root@192 git_data]# git commit -m "add dddd"
[master f21d4c5] add dddd
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dddd
[root@192 git_data]# git push -u origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 216 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To git@192.168.168.133:test/git_data.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@192.168.168.133:test/git_data.git'
代码合并
- 上传新的dev分支
[root@192 git_data]# git branch -d dev
[root@192 git_data]# git checkout -b dev
[root@192 git_data]# touch eeee
[root@192 git_data]# git add .
[root@192 git_data]# git commit -m "add eeee"
[dev 682a4ae] add eeee
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 eeee
[root@192 git_data]# git push -u origin dev
Counting objects: 5, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 406 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote: http://192.168.168.133/test/git_data/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To git@192.168.168.133:test/git_data.git
039134e..682a4ae dev -> dev
Branch dev set up to track remote branch dev from origin.
- 合并代码
- 登录管理员。,进入项目里