1、git介绍
git是一个分布式的版本管理系统,由linux系统的创造者Linus 于2005年开发,相对于svn git有速度快,适合大规模,跨地区多人协同开发的特点。
2、git安装
(1)yum安装
通过yum安装的软件版本较低。
#使用yum安装git
]# yum install git
(2)编译安装
编译安装可以安装较新饿版本,新版本可以在” https://github.com/git/git/”查看
#安装依赖软件
]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
# 下载解压git源码包
]# wget https://github.com/git/git/archive/v2.18.0.zip
]# unzip v2.18.0.zip
]# cd git-2.18.0/
# 编译安装git
]# make prefix=/usr/local/git all
]# make prefix=/usr/local/git install
# 安装后查看git版本
]# git --version
]# git version 2.18.0
3、初始化git
Git下载安装完成后,在使用git前需要先创建工作目录并初始化git。
# 创建工作目录
]$ mkdir data
]$ cd data
# 初始化工作目录
]$ git init
Initialized empty Git repository in /home/dayi123/data/.git/
]$ git config --global user.name "dayi123"
]$ git config --global user.email [email protected]
# 查看初始化后相关信息
]$ git config --list
user.name=dayi123
[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
4、git工作原理与基本操作
(1)git工作原理
对git的操作就是将本地工作目录的文件同步到索引区,再从索引去上传到本地仓库,再从本地仓库上传到远程仓库,同时还可以将远程仓库及本地仓库的文件下载到本地工作目录。
(2)git基本操作
操作命令:
git add 加入暂存区(index区域)
git status 查看状态
git status -s 状态概览
git diff 尚未暂存的文件
git diff --staged 暂存区文件
git commit 提交更新,试用”-m”参数可以直接在后面输入“message”,后跟-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区。
git reset 回滚
git rm 从版本库中移除
git rm --cached README 从暂存区中移除
git mv 相当于”mv”、”git rm”、”git add”三个命令
git log 查看提交日志
# 创建一个文件
]# echo 1213456 > git.test
# 将文件追加到索引区
]# git add git.test
# 将文件提交到本地仓库
]# git commit -m git.test
# 查看当前文件操作记录,id为文件提交id
]# git log
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (HEAD -> master)
Author: dayi123
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
5、分支管理
Git的默认所有的操作都在主分支上面,为了防止开发混乱,可以创建分支,在分支上操作,在分支上操纵执行的命令都是基于当前分支的。
git branch 创建分支
git branch –v 查看分支信息
git branch –merged 查看哪些分支已经被merged到主分支
git branch --no-merged 查看哪些分支没有被merged到主分支
git branch -d testing 删除分支
git checkout 分支名称 切换指针
git checkout --filename 撤销对文件的修改
git merge 分支名称 融合分支,将分支融合到主干
git stash
git tag 查看标签
git rebase 变基,
# 创建一个分支datatest1
]# git branch datatest1
# 查看当前的分支状态
]# git status
On branch master
nothing to commit, working tree clean
# 切换到datatest1分支
]# git checkout datatest1
Switched to branch 'datatest1'
# 查看当前分支时已经在datatest1分支
]# git status
On branch datatest1
nothing to commit, working tree clean
#在当前分支创建一个文件并提交到暂存区
]# echo datatest1 > branch2.html
]# git add branch2.html
# 将当前分支merged到主分支
]# git merge datatest1
Already up to date.
# 切换到主分支查看
]# git checkout master
]# git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
new file: branch2.html
# 查看单前那些分区被merged到主分区
]# git branch –merged
datatest1
* master
#给当前库打标签
[root@localhost data]# git tag -a v1.0 -m ‘abc’
[root@localhost data]# git tag
v1.0
6、git回滚
回滚命令:git reset [option] [commitid]
选项
--soft 缓存区和工作目录都不会被改变
--mixed 默认选项。缓存区和制定的提交同步,但工作目录不受影响
--hard 缓存区和工作目录都同步到指定的提交
# 修改提交的文件并在此提交
]# echo `date` >> git.test
]# git commit -m "2"
# 获取commitid
]# git log
commit 24867009ea7f916dc62b3fde3d4d15582fa6258b (HEAD -> master)
Author: dayi123
Date: Fri Aug 10 09:39:55 2018 -0400
2
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (–merged, datatest1)
Author: dayi123
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
# 恢复到提交前
]# git reset --hard 43e7aa596
HEAD is now at 43e7aa5 git.test
#查看提交后的状态
]# git log
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (HEAD -> master, –merged, datatest1)
Author: dayi123
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
7、使用git对远程仓库管理
使用git最终要将本地文件提交到远程git仓库中或者将远程仓库中的文件下载本地进行操作,常用的操作命令有:
git clone 仓库地址 将远程主机文件拉到本地
git pull 认证后更新代码,合并到之前代码中去
git fetch 认证后更新代码,不会合并到之前的代码中
git push origin master
git remote 获取远程库的信息
git remote –v 获取远程库的详细名称信息
git remote add xxx http://xxx 添加地址。默认第一个名程都为origin
git remote show origin
git remote rename pb paul #变更远程地址名称
Gitlab是一个基于Ruby on rails开发的源代码托管结局按方案,gitlab分为企业版和社区版两个版本。
Gitlab集成了nginx postgreSQL redis sidekiq等组件,在安装gitlab时会自动安装配置。
1、gitlab的安装与配置
(1)安装gitlab
# 配置gitlabyum源为国内源以方便安装
]# 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
# 清除并更新yum缓存
]# yum clean all
]# yum makecache
安装gitlab,默认安装安装的为最新版本,安装时可以指定具体的版本进行安装。
# 安装gitlab依赖软件
]# yum install curl policycoreutils openssh-server openssh-clients postfix
# 如果没有关闭防火墙需要配置防火墙
]# firewall-cmd --permanent --add-service=http
# 安装gitlab
]# yum install gitlab-ce
(2)配置启动gitlab
修改gitlab配置文件” /etc/gitlab/gitlab.rb”,绑定自己主机ip地址。
# 将external修改为自己主机ip地址
external_url 'http://192.168.16.128'
# 启动gitlab并使修改的配置生效
]# gitlab-ctl reconfigure
(3)登录gitlab
安装完成后即可通过浏览器登录gitlab,第一次登录需要设置密码。
(4)gitlab的操作命令
gitlab-ctl status:查看gitlab状态
gitlab-ctl start:启动gitlab
gitlab-ctl stop:停止gitlab
gitlab-ctl restart:重启gitlab
gitlab-ctl tail servername:查看gitlab集成的服务日志
#查看gitlab所有组件的状态
]# gitlab-ctl status
run: alertmanager: (pid 122565) 1802s; run: log: (pid 122574) 1802s
run: gitaly: (pid 122496) 1804s; run: log: (pid 122547) 1802s
run: gitlab-monitor: (pid 122520) 1803s; run: log: (pid 122525) 1803s
run: gitlab-workhorse: (pid 122480) 1804s; run: log: (pid 122524) 1803s
run: logrotate: (pid 121671) 1900s; run: log: (pid 122530) 1803s
run: nginx: (pid 121613) 1911s; run: log: (pid 122488) 1804s
run: node-exporter: (pid 121854) 1878s; run: log: (pid 122509) 1803s
run: postgres-exporter: (pid 122585) 1801s; run: log: (pid 122591) 1801s
run: postgresql: (pid 121078) 1980s; run: log: (pid 122514) 1803s
run: prometheus: (pid 122535) 1802s; run: log: (pid 122557) 1802s
run: redis: (pid 120945) 1986s; run: log: (pid 122513) 1803s
run: redis-exporter: (pid 122068) 1855s; run: log: (pid 122526) 1803s
run: sidekiq: (pid 121478) 1923s; run: log: (pid 122516) 1803s
run: unicorn: (pid 121406) 1929s; run: log: (pid 122515) 1803s
# 查看redis日志
[root@localhost ~]# gitlab-ctl tail redis
2018-08-10_16:42:14.05381 120945:M 10 Aug 12:42:14.047 * 10 changes in 300 seconds. Saving...
2018-08-10_16:42:14.05398 120945:M 10 Aug 12:42:14.053 * Background saving started by pid 126469
(5)gitlab服务安装目录说明
/var/opt/gitlab/git-data/repositories/:库默认存储目录
/opt/gitlab:应用代码和相应的依赖程序
/var/opt/gitlab:”gitlab-ctl reconfigure”命令编译后的应用数据和配置文件,不需要人为修改配置
/etc/gitlab:配置文件目录
/var/log/gitlab:此目录下存放了gitlab各个组件产生的日志
/var/opt/gitlab/backups/:备份文件生成的目录
(6)变更配置文件操作
gitlab-ctl show-config :修改配置后验证配置文件
gitlab-ctl reconfigure :修改配置后重置配置文件
2、gitlab的管理与使用
Gitlab安装完成后在登录gitlab,在gitlab创建组、用户以及项目并关联起来,用户在本地生成密钥对,并将公钥拷贝到gitlab。同时创建里程碑给用户分配任务,gitlab对客户端可以做一下操作:
# 将gitlab上的文件下载到本地
]# git clone [email protected]:java/java1.git
# 在客户端创建分支完成分配的任务并上传至gitlab
]# git branch index
]# git checkout index
]# echo "hello world" > index.html
]# git add .
]# git commit -m "index"
# 提交到远程git仓库
]# git push origin index
#查看远程库的详细信息
]# git remote -v
origin [email protected]:java/java1.git (fetch)
origin [email protected]:java/java1.git (push)
3、gitlab的备份与恢复
(1)gitlab的备份
备份前需要修改配置文件”/etc/gitlab/gitlab.rb”中的以下内容:
备份文件存放路径:
gitlab_rails['backup_path'] = '/data/backup/gitlab'
本地保留多少天备份:
gitlab_rails['backup_keep_time'] = 604800
修改完配置文件后需要重新加载配置文件,并手动执行一次备份
#创建备份文件存放目录并授权
]# mkdir /data/backup/gitlab -p
]# chown -R git.git /data/backup/gitlab
#重新加载配置文件
]# gitlab-ctl reconfigure
# 手动执行一次备份并查看备份
]# /usr/bin/gitlab-rake gitlab:backup:create
]# ls /data/backup/gitlab/
1533992013_2018_08_11_11.1.4_gitlab_backup.tar
# 将备份加入到定时任务中
]# crontab -l
03 2 * * * /usr/bin/gitlab-rake gitlab:backup:create >dev/null 2>&1
(2)gitlab恢复
在恢复前需要停止数据写入服务,需要停掉”unicorn”服务以及”sidekiq”服务。
# 停掉数据写入服务
]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# 执行恢复,backup后面为备份文件的时间戳及时间
]# gitlab-rake gitlab:backup:restore BACKUP=1533992013_2018_08_11_11.1.4
# 恢复完成后,再次启动”unicorn”服务及”sidekiq”服务
]# gitlab-ctl start unicorn
]# gitlab-ctl start sidekiq
4、配置gitlab发送邮件功能
在配置gitlab发送邮件前需要确保gitlab服务所在主机已安装postfix并已启动,配置发送邮件功能够将创建用户信息及分配任务时将相关信息发送相关负责人。
配置邮件发送功能时需要在gitlab配置文件中配置一下参数:
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.126.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "dayi123"
gitlab_rails['smtp_password'] = "mailsnmp_password"
gitlab_rails['smtp_domain'] = "126.com"
gitlab_rails['smtp_authentication'] = "login"
配置完成后重新加载配置:
#重新加载配置文件
]# gitlab-ctl reconfigure
测试时将邮箱配置为163邮箱及126邮箱(均开启了smtp)邮件不能正常发送出去,会报如下的错误(可通过” gitlab-ctl tail”命令查看日志或者登录gitlab在监控的”已停止”中查看):
Net::SMTPFatalError: 554 DT:SPM 126 smtp1,C8mowAD3ZCIqlohbfq7kGQ--.54263S3 1535677995,please see http://mail.163.com/help/help_spam_16.htm?ip=58.37.62.187&hostid=smtp1&time=1535677995
发送失败的原因可能是163邮箱将发送内容当做了垃圾邮件处理,导致发送不成功,当使用腾讯企业邮箱时,可以正常发送。