Git、Github、Gitlab的区别
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Github是在线的基于Git的代码托管服务。 GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。 Gitlab解决了这个问题, 可以在上面创建免费的私人repo。
git是一套软件,可以做本地私有仓库。 github本身是一个代码托管网站 ,公有和私有仓库(收费) ,不能做本地私有仓库。 gitlab本身也是一个代码托管的网站,功能上和github没有区别,公有和私有仓库(免费),可以部署本地私有仓库。
Git 与 SVN 区别
- Git是分布式的,svn不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
- Git是分布式的版本控制器,没有客户端和服务器端的概念。SVN它是C/S结构的版本控制器,有客户端和服务器端 ,服务器如果宕机而且代码没有备份的情况下,完整代码就会丢失。
部署Git服务
yum install git git-core gitweb -y
useradd git
passwd git
mkdir /git-root/
cd /git-root/
git init --bare code.git
#初始化
chown -R git:git code.git
# 权限

git仓库测试
ssh-keygen
ssh-copy-id [email protected]
#配置免密连接git仓库
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
git config --list
# 查看配置
git clone [email protected]:/git-root/code.git

cd code
vim weixin.sh
git add weixin.sh
git commit -m 'first commit'
git push origin master


Git工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
配置更改
远程仓库配置

可以看到origin url,所以直接push origin master
邮件名字配置


Git操作
1、如果你没有最新的代码,希望从头开始
git clone [email protected] # 这里是项目的地址(可从项目主页复制),将远程服务器的内容完全复制过来
cd BGBInspector_V01 # clone 之后进入该项目的文件夹
touch README.md # 新建readme文件
git add README.md # 将新的文件添加到git的暂存区
git commit -m ‘Its note:add a readme file’ # 将暂存区的文件提交到某一个版本保存下来,并加上注释
git push -u origin master # 将本地的更改提交到远程服务器
2、如果你已经有一个新版代码,希望直接把本地的代码替换到远程服务器
cd existing_folder #进入代码存在的文件夹,或者直接在该文件夹打开
git init # 初始化
git remote add origin git@master:/git-test/code.git #添加远程项目"code"库的地址(可从项目主页复制) ,前提是事先需要先在git远程服务器上创建相应的裸库"shell"
git add . #添加该文件夹中所有的文件到git的暂存区
git commit -m ‘note’ #提交所有代码到本机的版本库
git push -u origin master #将本地的更改提交到远程服务器
git log #查看提交日志
-
git 中 clone过来的时候,git 不会对比本地和服务器的文件,也就不会有冲突,
-
建议确定完全覆盖本地的时候用 clone,不确定会不会有冲突的时候用 git pull,将远程服务器的代码download下来

git init # 初始化
git add main.cpp # 将某一个文件添加到暂存区
git add . # 将文件夹下的所有的文件添加到暂存区
git commit -m ‘note‘ # 将暂存区中的文件保存成为某一个版本
git log # 查看所有的版本日志
git status # 查看现在暂存区的状况
git diff # 查看现在文件与上一个提交-commit版本的区别
git reset --hard HEAD^ # 回到上一个版本
git reset --hard XXXXX # XXX为版本编号,回到某一个版本
git pull origin master # 从主分支pull到本地
git push -u origin master # 从本地push到主分支
git pull # pull默认主分支
git push # push默认主分支 ...
版本控制
git show #查看当前版本
git reflog #查看历史版本
git reset a02ab39 #切换版本


分支管理
创建切换分支
git checkout -b dev # #创建dev分支,然后切换到dev分支,-b等于以下两条命令
git branch dev
git checkout dev
git branch #列出所有分支

合并分支
git merge dev
#把dev分支的工作成果合并到master分支上
git merge
#命令用于合并指定分支到当前分支。
删除分支
git branch -d dev

解决冲突
git checkout -b feature1 # 创建新的feature1分支
# 修改readme.txt最后一行,改为:
Creating a new branch is quick AND simple.
git add readme.txt # 在feature1分支上提交
git commit -m "AND simple"
git checkout master #切换到master分支
Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit.
#Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。
#在master分支上把readme.txt文件的最后一行改为:
Creating a new branch is quick & simple.
git add readme.txt
git commit -m "& simple"
#现在,master分支和feature1分支各自都分别有新的提交这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature1 Auto-merging readme.txt CONFLICT (content):
Merge conflict in readme.txt Automatic merge failed;
fix conflicts and then commit the result.
#readme.txt文件存在冲突,必须手动解决冲突后再提交。
git status #可以显示冲突的文件;
#直接查看readme.txt的内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple. >>>>>>> feature1
#Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后保存再提交:
git add readme.txt
git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
#最后,删除feature1分支:
git branch -d feature1
Deleted branch feature1 (was 75a857c).
部署Gitlab
安装 gitlab 依赖包
yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
添加yum源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
官方源太慢,可以使用国内清华yum源,配置如下
vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
安装Gitlab
yum -y install gitlab-ce
因为下载太慢我使用rpm包安装
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.5.7-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-10.5.7-ce.0.el7.x86_64.rpm
head -1 /opt/gitlab/version-manifest.txt
#查看gitlab版本

初始化 Gitlab gitlab要求语言环境为英文环境,必须切换,切换方法如下
cat <<EOF >/etc/profile.d/locale.sh
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_COLLATE=C
export LC_CTYPE=en_US.UTF-8
EOF
source /etc/profile.d/locale.sh
vim /etc/gitlab/gitlab.rb
# 修改为自己的IP地址

gitlab-ctl reconfigure
#初始化,需要一定时间
gitlab-ctl restart
#启动gitlab

访问Gitlab页面 如果你的服务器性能不佳会报502错误

Gitlab 添加smtp邮件功能
获取qq邮箱授权码


vim /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "ngdkzettpeuzhicg" #这是我的qq邮箱授权码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
重新初始化
gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl start
gitlab发送邮箱测试
gitlab-rails console
Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now


使用Gitlab
机器内存不足一般报错

创建项目组


创建用户



点击邮箱链接更改密码之后收到更改成功的邮件

之后用test登录
添加用户到组
使用admin用户登录,添加test,test2用户到组gitlab,test为Owner,test2为Developer

使用test登录创建项目testproject

生成公钥
useradd test
su test
ssh-keygen
cd .ssh/
cat id_rsa.pub
复制公钥到web


添加项目
分支master添加文件a.txt

创建新分支dev

分支dev添加文件b.txt

合并分支


Git操作
git clone [email protected]:test/testproject.git

修改a.txt内容为tao,提交上传


利用Gitlab管理k8s集群
权限设置
获取k8s集群API地址
kubectl cluster-info

获取k8s集群默认CA证书
kubectl get secrets

default-token-ll4sp为上面获取到的secrets的名称,用以下命令查看证书
kubectl get secret default-token-ll4sp -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

设置rbac
vim gitlab-admin-service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gitlab-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: gitlab-admin
namespace: kube-system
kubectl apply -f gitlab-admin-service-account.yaml
获取gitlab-admin的token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
