分布式版本控制系统:优点离线使用、分支管理
1 基本用法
1 安装与配置
yum install git
git config --global user.name "wuzuquan"
git config --global user.email "403621433@qq.com"
git config --global color.ui true
git config http.sslVerify "false" 解除文件上传限制
2、创建仓库
mkdir -p git/test
cd git/test
git init:初始化,目录下多了个.git目录
注意事项:版本控制只能跟着文本文件的改动;如果没有历史遗留问题,统一使用UTF-8编码;不要使用windows记事本
3、基本使用
git add -A 添加所有修改,包括新增
git commit -m "message" 提交到本地仓库
git status 显示当前仓库status
git diff readme.md 显示修改内容
4、版本回退
git log --pretty=oneline 显示所有版本日志
HEAD表示当前版本 HEAD ^ HEAD ^^ HEAD ~100
git reset --hard commitid 版本回退
git reflog 显示所有命令记录
head指向当前分支
5、工作区 版本库
stage 暂存区,master为自动创建的第一个分支
add命令是把修改添加到暂存区,可以多次add
commit命令是把暂存区的所有内容提交到当前分支
6、撤销修改
git checkout -- readme.md #撤销工作区的修改,撤销回到版本库一样,一键还原
如果已经添加到暂存区,又做了修改,现在撤销修改就回到添加到暂存区后的状态
注意事项:一定要加 -- ,不然就到另一个分支了
git reset 可以把暂存区的内容撤销,重新回到工作区
git reset HEAD readme.md
二者配合起来用
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
2 远程仓库
1、推到远程库
git remote rm origin
git remote add origin git@server-name:path/repo-name.git
git push -u origin master
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
2、从远程库 克隆
$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
3 分支管理
git checkout -b dev # 创建并切换到dev分支
git branch #查看当前分支
git add -A
git commit -m "dev branch test"
git checkout master # 切换到master分支
git merge dev #将dev分支内容合并到当前分支master
git branch -d dev # 删除dev分支
1、如何解决分支冲突
合并后提示冲突,git status命令查看哪些文件冲突
vim 修改冲突的文件
git add -A
git commit
git log --graph --pretty=oneline --abbrev-commit #查看分支合并情况
2、分支管理策略
master分支是非常稳定的,仅用于发布新版本,平时不能再上面干活
在dev分支干活,每个人可以有自己的分支
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并
4 标签管理
git tag v1.0 默认打在当前分支最新的commit上
git tag 查看所有tag
git tag -d v1.0 删除标签
git show v1.0 查看tag 信息
git tag -a v0.8 -m "version0.8 released" 6f9ea49
git push origin v0.8 推送tag到远程仓库
git push origin :refs/tags/v0.8 删除远程仓库tag
git push origin --tags 推送所有
5 个性化配置
在根目录下建立.gitignore文件,提交到git,过滤掉不需要提交的文件类型
6 搭建git服务器
yum install autoconf
yum install zlib
yum install zlib-devel
yum remove git 删除旧版本git
wget https://github.com/git/git/archive/v2.18.0.tar.gz
tar -vxf git-2.18.0.tar.gz
make configure
./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv
sudo make install install-doc install-html
sudo vim /etc/profile
在最后一行添加
export PATH=/usr/local/git/bin:$PATH
保存后使其立即生效
source /etc/profile
git --version
adduser testgit # 创建git账户
passwd testgit
vim /etc/ssh/sshd_config
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
禁止testgit账户shell登录:
vim /etc/passwd
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
su testgit
mkdir .ssh
touch .ssh/authorized_keys
git init --bare test.git# 创建一个裸仓库
在客户端创建SSH密钥并上传
ssh-keygen -t rsa -C "403621433@qq.com"
该命令会产生两个文件: id_rsa对应私钥,id_rsa.pub对应公钥
将id_rsa.pub中的内容拷贝到服务器的authorized_keys文件
git init
git remote rm origin
git remote add origin testgit3@172.18.245.163:/home/testgit3/test.git
git push -u origin master
git remote -v #查看远程仓库信息
git push origin dev # 推送dev分支
git pull origin dev #拉分支
git branch --set-upstream-to=origin/dev dev #将远程分支与本地分支连接起来
git rebase
7、centos7搭建gitlab服务器
1. 安装依赖软件
yum -y install policycoreutils openssh-server openssh-clients postfix
2.设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
3、下载gitlab安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
yum install policycoreutils-python
rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
4、修改gitlab配置文件制定服务器ip和自定义端口
vim /etc/gitlab/gitlab.rb
ps:注意这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放相对应得端口
5、启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
netstat -lnp|grep 80 查看端口占用情况
ps 1328 查看进程详情
6、访问gitlab页面
初始账户: root 密码: 5iveL!fe
第一次进来修改密码
7、发信设置
vim /etc/gitlab/gitlab.rb
修改后执行gitlab-ctl reconfigure
测试邮件是否生效
gitlab-rails console
Notify.test_email('wuzuquan2@xiamenair.com', '邮件标题', '邮件正文').deliver_now
在卸载gitlab然后再次安装执行sudo gitlab-ctl reconfigure的时候往往会出现:ruby_block[supervise_redis_sleep] action run,会一直卡无法往下进行!
解决方案:
1、按住CTRL+C强制结束;
2、运行:sudo systemctl restart gitlab-runsvdir;
3、再次执行:sudo gitlab-ctl reconfigure
8、设置sshkeys
settings->ssh keys ,添加ssh 公钥