赞
踩
git的工作环境
- 工作区
- 暂存区 git add *
- 版本库 git commit -m “版本描述信息”
- HEAD
- 版本号
- 版本日志
- git clone git@IP地址:/自建的目录/自建的库/ #克隆到本地
- git add . #存储到暂存区
- git commit -m "描述信息" #更新版本
- git push origin master #上传到gitlab
- [root@vm20 ~]# git log
-
- commit fbecfa3d04ae5038aa11bf55942e46c840077ace #id号
每个版本都会有一个id号,也就是commit id
部署git
- 环境:
- git-server 192.168.246.214 充当服务器
- client 192.168.246.213
-
- 安装:所有机器都安装
- [root@git-server ~]# yum install -y git
- [root@git-server ~]# git --version
- git version 1.8.3.1
-
- `所有的机器都添加,只要邮箱和用户不一样就可以`
- # git config --global user.email "soho@163.com" ----设置邮箱
- # git config --global user.name "soho" ----加添用户
git使用
- 1.创建一个空目录:在中心服务器上创建
- [root@git-server ~]# mkdir /git-test
- [root@git-server ~]# useradd git #创建一个git用户用来运行git
- [root@git-server ~]# passwd git #给用户设置密码
- [root@git-server ~]# cd /git-test/
-
- 2.通过git init命令把这个目录变成Git可以管理的仓库:
- 第1种情况:可以改代码,还能上传到别人的机器,别人也能从你这里下载但是别人不能上传代码到你的机器上。
- 第2种情况:只是为了上传代码用,别人从这台机器上下载代码也可以上传代码到这台机器上,经常用于核心代码库。
创建----裸库:
- `语法:git init --bare 库名字
-
- #在server服务端
- [root@git-server git-test]# git init --bare testgit
- Initialized empty Git repository in /git-test/testgit/
- [root@git-server ~]# chown git.git /git-test -R #修改权限
- 2.仓库创建完成后查看库目录:
- [root@git-server git-test]# cd testgit/
- [root@git-server testgit]# ls
- branches config description HEAD hooks info objects refs
客户端
- 1.配置免密登录
- [root@client ~]# ssh-keygen #生成秘钥
- [root@client ~]# ssh-copy-id -i git@192.168.246.214 #将秘钥传输到git服务器中的git用户
- 2.克隆git仓库
- [root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
- Cloning into 'testgit'...
- warning: You appear to have cloned an empty repository.
- [root@client ~]# ls #查看仓库已经克隆下来了
- anaconda-ks.cfg testgit
创建文件模拟代码提交到仓库
- 1.在testgit目录下创建一个测试文件test.txt
- [root@client ~]# cd testgit/
- [root@client testgit]# vi test.txt #随便写点东西
- 2.把文件添加到暂存区:使用 "git add" 建立跟踪
- [root@client testgit]# git add test.txt
- 注: 这里可以使用 git add * 或者 git add -A
- 3.提交文件到本地仓库分支:
- [root@client testgit]# git commit -m "test1"
- [master (root-commit) 2b51ff9] test1
- 1 file changed, 2 insertions(+)
- create mode 100644 test.txt
- -m:描述
- 4.查看git状态:
- [root@client testgit]# git status
- # On branch master #分支位于master
- 5.修改文件后再此查看状态:
- [root@client testgit]# echo '1122334' >> test.txt
- [root@client testgit]# git status
- # 位于分支 master
- # 尚未暂存以备提交的变更:
- # (使用 "git add <file>..." 更新要提交的内容)
- # (使用 "git checkout -- <file>..." 丢弃工作区的改动)
- #
- # 修改: readme.txt
- #
- 修改尚未加入提交(使用 "git add" 和/或 "git commit "
- 6.先add
- [root@client testgit]# git add -A
- 8.再次提交commit:
- [root@client testgit]# git commit -m "add2" test.txt
- [master 73bf688] add2
- 1 file changed, 1 insertion(+)
- [root@client testgit]# git status
- # On branch master
- nothing to commit, working directory clean

版本回退
- 查看现在的版本
- [root@client testgit]# git log
-
- 回到上一个版本
- #一个^代表回退一次,2个^代表回退2此,依此类推……
- [root@client testgit]# git reset --hard HEAD^
- HEAD is now at 0126755 test1
- 2.回到指定的版本(根据版本号):
- [root@client testgit]# git reset --hard dd66ff
- HEAD is now at dd66ff9 add2
-
- ==========================================================
- 注:消失的ID号:可以查看之前的所有的版本
- [root@vm20 gittest]# git reflog
删除文件
从工作区删除test.txt,并且从版本库一起删除
- 从工作区删除
- [root@client testgit]# rm -rf test.txt
- 从版本库删除:
- [root@client testgit]# git rm test.txt
- rm 'test.txt'
- [root@client testgit]# git commit -m "删除文件test.txt"
- [master cebc081] 删除文件test.txt
- 1 file changed, 3 deletions(-)
- delete mode 100644 test.txt
将代码上传到仓库的master分支
- [root@client testgit]# vi a.txt #创建一个新文件
- [root@client testgit]# git add a.txt
- [root@client testgit]# git commit -m "add"
- [root@client testgit]# git push origin master #上传到远程仓库master分支
- Counting objects: 11, done.
- Compressing objects: 100% (4/4), done.
- Writing objects: 100% (11/11), 828 bytes | 0 bytes/s, done.
- Total 11 (delta 0), reused 0 (delta 0)
- To git@192.168.246.214:/git-test/testgit/
- * [new branch] master -> master
测试:
在客户端将仓库删除掉然后在克隆下来查看仓库中是否有文件
- [root@git-client ~]# rm -rf testgit/
- [root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
- Cloning into 'testgit'...
- remote: Counting objects: 11, done.
- remote: Compressing objects: 100% (4/4), done.
- remote: Total 11 (delta 0), reused 0 (delta 0)
- Receiving objects: 100% (11/11), done.
- [root@client ~]# cd testgit/
- [root@client testgit]# ls
- a.txt
- [root@client testgit]# cat a.txt
- hello world
创建分支并合并分支
- [root@client testgit]# ls在客户端操作:
- [root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
- [root@client testgit]# git status
- # On branch master #当前所在为master分支
- #
- # Initial commit
- #
- nothing to commit (create/copy files and use "git add" to track)
-
- 创建分支:
- [root@client testgit]# git branch dev #创建分支。
- [root@client testgit]# git branch #查看分支。*在哪里就表示当前是哪个分支
- dev
- * master
- 切换分支:
- [root@client testgit]# git checkout dev
- Switched to branch 'dev'
- [root@client testgit]# git branch
- * dev
- master
- 在dev分支创建一个文件;
- [root@client testgit]# vi test.txt
- [root@client testgit]# git add test.txt
- [root@client testgit]# git commit -m "add dev"
- [dev f855bdf] add dev
- 1 file changed, 1 insertion(+)
- create mode 100644 test.txt
- 现在,dev分支的工作完成,我们就可以切换回master分支:
- [root@client testgit]# git checkout master
- Switched to branch 'master'
-
- 切换回`master`分支后,再查看一个`test.txt`文件,刚才添加的内容不见了!因为那个提交是在`dev`分支上,而`master`分支此刻的提交点并没有变:
- [root@client testgit]# ls
- a.txt
-
- 现在,我们把`dev`分支的工作成果合并到`master`分支上:
- [root@client testgit]# git merge dev
- Updating 40833e0..f855bdf
- Fast-forward
- test.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 test.txt
- [root@client testgit]# ls
- a.txt test.txt
- 现在已经将dev分支的内容合并到master上。确认没有问题上传到远程仓库:
- [root@client testgit]# git push origin master
-
- 合并完成后,就可以放心地删除`dev`分支了:
- [root@client testgit]# git branch -d dev
- Deleted branch dev (was f855bdf).
-
- 删除后,查看`branch`,就只剩下`master`分支了:
- [root@client testgit]# git branch
- * master

部署gitlab服务
官网下载gitlab地址
- 百度搜索gitlab--点击https://gitlab.com/users/sign_in
- 拉到最下面--点击 关于 GitLab
- 再拉到最下面--有个Resources--点击Install--往下拉点击有个cenos 7版本的下载--安装命令步骤操作即可
配置yum源
- [root@git-server ~]# cd /etc/yum.repos.d/
- #配置yum源
- [root@git-server yum.repos.d]# vi 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
-
- #安装相关依赖
- [root@git-server yum.repos.d]# yum install -y curl policycoreutils-python openssh-server
- [root@git-server yum.repos.d]# systemctl enable sshd
- [root@git-server yum.repos.d]# systemctl start sshd
-
- #安装postfix
- [root@git-server yum.repos.d]# yum install postfix #安装邮箱
- [root@git-server yum.repos.d]# systemctl enable postfix
- [root@git-server yum.repos.d]# systemctl start postfix
-
- #安装的版本,下面那条命令是安装最新版,可能存在不兼容的风险
- [root@git-server yum.repos.d]# yum install -y gitlab-ce-13.1.1-ce.0.el7.x86_64 #安装的版本
- [root@git-server yum.repos.d]# yum install -y gitlab-ce #将会安装gitlab最新版本

配置gitlab
- [root@git-server ~]# vim /etc/gitlab/gitlab.rb
- 1.# 添加对外的域名(gitlab.papamk.com请添加A记录指向本服务器的公网IP):将原来的修改为
- external_url 'http://192.168.246.214'
- 2.设置地区
- gitlab_rails['time_zone'] = 'Asia/Shanghai'
-
- 将数据路径的注释去掉,可以更改
- #第501-505行,去除注释
- git_data_dirs({
- "default" => {
- "path" => "/mnt/nfs-01/git-data"
- }
- })
-
- 开启ssh服务:
- #第519行,去除注释
- gitlab_rails['gitlab_shell_ssh_port'] = 22
-
- 开启邮箱服务
- #直接在637行开始添加以下内容
- gitlab_rails['smtp_enable'] = true #开启smtp服务
- gitlab_rails['smtp_address'] = "smtp.163.com" #指定smtp地址
- gitlab_rails['smtp_port'] = 465
- gitlab_rails['smtp_user_name'] = "xxxx@163.com" #指定邮箱
- gitlab_rails['smtp_password'] = "邮箱授权密码"
- gitlab_rails['smtp_domain'] = "163.com" #邮箱地址的域
- gitlab_rails['smtp_authentication'] = "login"
- gitlab_rails['smtp_enable_starttls_auto'] = true
- gitlab_rails['smtp_tls'] = true
- gitlab_rails['smtp_openssl_verify_mode'] = 'none'
- gitlab_rails['gitlab_email_from'] = 'xxxx@163.com' #指定发件邮箱
- gitlab_rails['gitlab_email_display_name'] = 'Admin' #指定发件人
- #user["git_user_email"] = "xxxx@163.com"

重置并启动GitLab执行:
[root@git-server ~]# gitlab-ctl reconfigure #重新加载,需要等很长时间
启动
[root@git-server ~]# gitlab-ctl restart #启动
邮箱测试
- [root@git-server ~] # gitlab-rails console #进入终端
-
- #开始测试
- irb(main):001:0> Notify.test_email('xxxx@qq.com', 'Message Subject', 'Message Body').deliver_now #测试发送邮件是否成功
测试web页面访问
输入IP地址,直接访问,会出来一个界面,它默认用户是root,直接输入密码就可以(设置密码)
在服务器通过在git客户端
- [root@client ~]# git clone git@192.168.246.214:root/testapp.git
- Cloning into 'testapp'...
- remote: Enumerating objects: 6, done.
- remote: Counting objects: 100% (6/6), done.
- remote: Compressing objects: 100% (4/4), done.
- remote: Total 6 (delta 0), reused 0 (delta 0)
- Receiving objects: 100% (6/6), done.
- [root@client ~]# ls
- testapp
- [root@client ~]# cd testapp/
- [root@client testapp]# ls
- test.txt 同步时间.txt
- [root@client testapp]#
-
- 注意:如果克隆不下来可以重新使用命令生成私钥
- [root@client ~]# ssh-keygen -t rsa #然后将公钥添加到gitlab中。
-
- 使用http的
- [root@client ~]# rm -rf testgit/
- [root@client ~]# git clone http://192.168.246.214/root/testapp.git
- Cloning into 'testapp'...
- Username for 'http://192.168.246.214': root
- Password for 'http://root@192.168.246.214':12345678 #为自己设置的密码
- remote: Enumerating objects: 6, done.
- remote: Counting objects: 100% (6/6), done.
- remote: Compressing objects: 100% (4/4), done.
- remote: Total 6 (delta 0), reused 0 (delta 0)
- Unpacking objects: 100% (6/6), done.
- [root@client ~]# ls
- testapp
-
- 提交到远程gitlab仓库
- [root@client ~]# cd testapp/
- [root@client testapp]# vi update.txt
- 1000phone
- [root@client testapp]# git add .
- [root@client testapp]# git commit -m 'updata-test'
- [root@client testapp]# git push origin master
- Counting objects: 4, done.
- Compressing objects: 100% (2/2), done.
- Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done.
- Total 3 (delta 1), reused 0 (delta 0)
- To git@192.168.153.156:root/testapp.git
- 4f35d4b..a0067ea master -> master

Gitlab 备份与恢复
查看系统版本和软件版本
- [root@git-server ~]# cat /etc/redhat-release
- CentOS Linux release 7.4.1708 (Core)
-
- [root@git-server ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
- 13.1.1
数据备份
- 打开/etc/gitlab/gitlab.rb配置文件,查看一个和备份相关的配置项:
- vim /etc/gitlab/gitlab.rb
- gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份的路径
- gitlab_rails['backup_archive_permissions'] = 0644 #备份文件的默认权限
- gitlab_rails['backup_keep_time'] = 604800 #保留时长,秒为单位
-
- # 重启
- [root@git-server ~]# gitlab-ctl reconfigure
- 或者
- [root@git-server ~]# gitlab-ctl restart
-
- # 执行备份命令进行备份
- [root@git-server ~]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create
-
- 也可以添加到 crontab -e 中定时执行:
- 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
-
- 备份完成,会在备份目录中生成一个当天日期的tar包。
- [root@git-server ~]# ls /var/opt/gitlab/backups/
- 1588774133_2020_05_06_12.10.3_gitlab_backup.tar

数据恢复
特别注意:
备份目录和gitlab.rb中定义的备份目录必须一致
GitLab的版本和备份文件中的版本必须一致,否则还原时会报错
在恢复之前,可以删除一个文件,以便查看效果
执行恢复操作:
- [root@git-server ~]# cd /var/opt/gitlab/backups/
- [root@git-server backups]# gitlab-rake gitlab:backup:restore BACKUP=1588774133_2020_05_06_12.10.3
- 注意恢复文件的名称
-
- # 中途会输入2次yes
-
- 恢复完成后,或者重启服务,再打开浏览器进行访问,发现数据和之前的一致:
- [root@git-server backups]# gitlab-ctl restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。