P1 kube-node2服务器
互联网已经存在的大型git服务器【版本控制服务器】
https://github.com【国外网站,速度慢】
https://about. gitlub.com/【国外网站,速度慢】
https://gitee.com【国内阿里的git网站,可以注册使用】
环境准备,使用之前的kube-node2主机,建本地 kube-node2 服务器:导入中文版 kube-node2 镜像
上传gitlab_zh.tar镜像文件到root家目录下
[root@kube-node2 ~]# docker load -i gitlab_zh.tar #向docker中,导入镜像gitlab_zh.tar
[root@kube-node2 ~]# docker images
要想以ssh的方式访问kube-node2,会和物理机的22端口冲突,修改主机ssh的端口为2022
[root@kube-node2 ~]# vim /etc/ssh/sshd_config
17 Port 2022
[root@kube-node2 ~]# systemctl restart sshd
[c:\~]$ ssh [email protected] 2022 #Ctrl + D退出xshell远程连接,重新连接加上端口2022
启动gitlab容器
##【docker run】 根据镜像启动一个容器;【-d】 指定从后台运行容器;
##【-h】 设置容器主机名;--name 给容器命名,容器命名必须是唯一的;
##【-p】端口映射,宿主机端口:容器端口;【-v】 持久卷映射,真实目录:容器内目录
[root@kube-node2 ~]# docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlib/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh:latest
#查看容器的状态信息,状态必须是:... (healthy),包含starting 代表正在启动中
#docker rm -i 【ID号】 强制删除容器
[root@kube-node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0acff2ba797 kube-node2_zh:latest "/assets/wrapper" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp kube-node2
初始化 gitlab 服务器:密码需大于8位
- [x] 浏览器访问 192.168.1.22 即可,输入新密码 1234.com【任意定义】
输入默认用户名: root,密码:1234.com
添加 gitlab项目
- 创建群组 group:使用群组管理项目和人员是非常好的方式
- 创建项目 project:存储代码地方,里面包含问题列表、维基文档及其他一些 gitlab 功能
- 创建成员 member:添加你的团队成员或其他人员到 gitlab
创建群组
选择【管理区域】
选择【New group】
设置群组路径 devops,群组名称devops,描述devops,可见等级为公开
创建项目
选择【管理区域】
选择【New project】
设置项目属于的组devops,项目名称myweb,项目描述myweb,可见等级公开
P1 用户管理
创建用户
选择【管理区域】
选择【New user】
设置【姓名zhangzhigang】,【用户名zzg】和【电子邮箱z[email protected]】
[姓名] #类似昵称;
[用户名] #此为普通用户的登录账号名;
选择【编辑】
为用户设置密码:1234.com
将用户添加到组:oot 用户将新用户加入组中,并设置新用户为“主程序员”
选择【管理区域】,点击【Groups: 】
点击组【devops】
选择用户,为用户设置类别,点击【增加用户到群组】
为项目添加新的管理用户
选择【管理区域】,点击【Projects: 】,点击【devops/myweb】,点击名称【myweb】,选择【设置】,选择【成员】
选择【要邀请的成员】,选择【角色权限】,点击【添加到项目即可】
#因为用户zzg已经在组devops中了,所以用户zzg默认就属于项目,不需要重复添加;
#其他单个用户可以安装此步骤进行添加;
使用普通用户登录:用户在第一次登录时需要修改密码,退出当前管理员账号
输入用户名 zzg 和密码 1234.com, 选择【登录】
修改密码,这里和原密码相同【1234.com】
使用普通账号zzg,密码1234.com,重新登录
代码管理:查看项目详细信息【可以看到对应的git使用命令】
通过 http 协议上传代码:将本地仓库推送至服务器,在pycharm主机操作
[root@kube-node1 ~]# cd git_lesson/myweb/ #进入到本地myweb的git仓库下
[root@kube-node1 myweb]# git remote add origin http://192.168.1.22/devops/myweb.git
[root@kube-node1 myweb]# git push -u origin --all #将本地git仓库下的所有分支,推送到远程服务器的origin仓库中
Username for 'http://192.168.1.22': zzg #输入项目管理用户:zzg
Password for 'http://[email protected]': #输入项目管理用户的密码:1234.com
#将本地git仓库下的所有标签,也推送到远程服务器的origin仓库中
[root@kube-node1 myweb]# git push -u origin --tags
Username for 'http://192.168.1.22': zzg #输入项目管理用户:zzg
Password for 'http://[email protected]': #输入项目管理用户的密码:1234.com
在 gitlib 服务器上查看推送结果,推送成功,可以查看【提交】【分支】和【标签】*
[root@kube-node1 myweb]# vim README.md
#git test
this is a test
```python
print('Hello World!')
```
[root@kube-node1 myweb]# git add .
[root@kube-node1 myweb]# git commit -m 'add lines to README.md'
[root@kube-node1 myweb]# git push #重复再次推送代码时,使用git push即可
Username for 'http://192.168.1.22': zzg #输入项目管理用户:zzg
Password for 'http://[email protected]': #输入项目管理密码:1234.com
通过 ssh 上传代码:将本地仓库推送至服务器,配置SSH免密登陆
[root@kube-node1 myweb]# ssh-keygen
[root@kube-node1 myweb]# cat /root/.ssh/id_rsa.pub #查看公钥,复制公钥
在kube-node2服务器上配置SSH免密
[root@kube-node1 myweb]# > /root/.ssh/known_hosts
[root@kube-node1 myweb]# git remote #查看kube-node2远程服务器仓库在本地的映射
[root@kube-node1 myweb]# git remote remove origin
[root@kube-node1 myweb]# git remote add origin [email protected]:devops/myweb.git #使用SSH协议添加origin默认仓库
[root@kube-node1 myweb]# git push #推送版本库【.git】中数据,不用输入用户名和密码
[root@kube-node1 myweb]# vim README.md
#git test
this is a test
```python
print('Hello World!')
print('Hello World!')
```
[root@kube-node1 myweb]# git add .
[root@kube-node1 myweb]# git commit -m 'modify README.md'
[root@kube-node1 myweb]# git push #不需要输入密码,推送成功
三、远程分支管理
P1 远程仓库
远程仓库基础
- 远程仓库是指托管在因特网或其他网络中的你的项目的版本库
- 可以有多个远程仓库,通常有些仓库对你只读,有些则可读写
- 与他人协作涉及管理远程仓库,以及根据需要推送或拉取数据
- 管理远程仓库包括添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等
查看远程仓库:如果你已经克隆了仓库,那么至少应该能看到 origin,这是Git 给你克隆的仓库服务器的默认名字
查看远程仓库
[root@kube-node1 ~]# cd /root/git_lesson/grit/
[root@kube-node1 grit]# git remote #查看kube-node2远程服务器仓库在本地的映射
[root@kube-node1 grit]# git remote -v #查看仓库的使用详情【fetch 拉取数据】,【push 推送数据】
添加远程仓库:运行 git remove add < shortname >< url > 添加一个新的远程 Git 仓库
[root@kube-node1 grit]# git remote add pb https://github.com/paulboone/ticgit #将远程的github服务器上的仓库,添加到本地
[root@kube-node1 grit]# git remote -v #查看使用详情【fetch 拉取数据】,【push 推送数据】
本地已经有了远程服务器的仓库pb, 使用fetch拉取远程仓库中的数据到本地仓库
[root@kube-node1 grit]# git fetch pb #拉取的仓库有两个分支
[root@kube-node1 grit]# git remote show origin #查看远程仓库origin更多的信息
[root@kube-node1 grit]# git remote rename pb paul #将在本地映射的远程仓库的名称修改为paul
[root@kube-node1 grit]# git remote -v #查看在本地映射的远程仓库,改名成功
[root@kube-node1 grit]# git remote rm paul #移除远程仓库在本地的映射paul
使用远程分支
- 远程引用是对远程仓库的引用(指针),包括分支、标签等等
- 以通过 git ls-remote < remote > 获得远程引用的完整列表
- 远程跟踪分支是远程分支状态的引用。它们是无法移动的本地引用
- 一旦进入了网络通信,Git 就会为你移动它们以精确反映远程仓库的状态
远程分支命名
#远程指针【origin/master】和本地指针【master】同时指向同一次提交
#1》在本地不能直接移动远程分支的指针,是通过fetch拉取时移动的;
#2》本地的分支可以通过不断的提交进行移动;
#3》远程分支和本地分支不会自动合并,需要我们自己通过merge进行分支合并;
推送分支
##向远程服务器的仓库origin推送分支serverfix【这里不需要实际操作】
##如果远程服务器有分支serverfix,则会更新分支中的代码
##如果远程服务器中没有分支serverfix,则会创建该分支
[root@kube-node1 ~]# cd /root/git_lesson/myweb/ #向远程服务器推送分支
[root@kube-node1 myweb]# git branch #查看分支
[root@kube-node1 myweb]# git branch b1 #创建分支b1
[root@kube-node1 myweb]# git checkout b1 #切换到分支b1下
[root@kube-node1 myweb]# cp /etc/issue . #拷贝issue文件到当前目录下
[root@kube-node1 myweb]# git add . #将此次修改添加到暂存区中
[root@kube-node1 myweb]# git commit -m 'add issue' #提交
将本地仓库master分支,推送到远程的git服务器上,因为修改的是分支b1,master分支没有做任何操作,推送失败
[root@kube-node1 myweb]# git push origin master
Everything up-to-date
将分支b1,推送到远程版本库下,分支b1存在则会自动合并数据;分支b1不存在,会自动创建分支b1
[root@kube-node1 myweb]# git push origin b1
在kube-node2服务器上查看分支更新
git pull【跟踪分支】 #拉取远程服务器数据时,会自动合并远程分支和本地分支;
git fetch【拉取分支】 #下载远程服务器分支到本地,但不会自动合并远程分支和本地分支,需要自己合并;
【git pull】和【git fetch】的演示
[root@kube-node1 myweb]# cd /root/git_lesson/
[root@kube-node1 git_lesson]# git clone http://192.168.1.22/devops/myweb.git newweb
在myweb仓库的b1分支下修改数据,提交到本地仓库
[root@kube-node1 git_lesson]# cd /root/git_lesson/myweb/
[root@kube-node1 myweb]# git branch #查看当前所处的分支,b1分支
[root@kube-node1 myweb]# vim issue #修改issue文件
\S
Kernel \r on an \m
Kernel \r on an \m
Kernel \r on an \m
[root@kube-node1 myweb]# git add .
[root@kube-node1 myweb]# git commit -m "modified issue"
在myweb仓库的master分支下修改数据,提交到本地仓库
[root@kube-node1 myweb]# git checkout master
[root@kube-node1 myweb]# cp /etc/motd .
[root@kube-node1 myweb]# git add .
[root@kube-node1 myweb]# git commit -m "add motd"
推送本地仓库中的数据到远程kube-node2服务器上
[root@kube-node1 myweb]# git push #成功
在newweb仓库下,验证push和fetch的区别
[root@kube-node1 myweb]# cd /root/git_lesson/newweb/
[root@kube-node1 newweb]# git pull #将远程git服务器上的数据下载下来,并且分支会自动合并
[root@kube-node1 newweb]# git fetch origin b1 #【fetch】 只会从origin仓库中下载分支b1
##【pull】 会将分支b1从origin仓库中下载下来,并且会和本地的b1分支进行合并
##会打开一个合并分支的对话框
##合并提示信息:Merge branch 'b1' of http://192.168.1.118/devops/myweb
[root@kube-node1 newweb]# git pull origin b1
[root@kube-node1 newweb]# git push origin --delete b1 #删除远程服务器,origin仓库中b1分支