22.5/22.6 单机上使用git
22.7 简历远程仓库
22.8 克隆远程仓库
22.9 分支管理
22.10 远程分支管理
22.11 标签管理
22.12 git别名
22.13 搭建git服务器
22.14/22.15 安装gitlab
22.16 使用gitlab
22.17 gitlab备份和恢复
html
gitlab修改端口 http://blog.csdn.net/arybd/article/details/54635295
GitLab 修改主机名配置 http://www.mamicode.com/info-detail-1316828.html
第三方邮件:GitLab 使用163邮箱发送邮件 http://blog.csdn.net/liuruiqun/article/details/50000213
server ssh 端口并非22 http://www.cnblogs.com/limx/p/5709101.html linux
GitLab遇到SSH修改了默认端口解决方法 http://www.linuxidc.com/Linux/2017-02/141043.htm
应该修改 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
“# If you use non-standard ssh port you need to specify it”
ssh_port: xxxxx
gitlab的钩子相关配置 http://fighter.blog.51cto.com/1318618/1670667nginx
gitlab经常使用命令 https://www.cnblogs.com/zlw-xf/p/9134274.htmlgit
1、单机上使用gitgithub
yum install -y git mkdir /data/gitroot cd /data/gitroot git init //初始化仓库
初始化完成后也会生成.git目录redis
邮件地址和用户名位置shell
vim 1.txt //建立一个新文件 git add 1.txt//把1.txt添加到仓库 git commit -m “add 1.txt” //add完了必需要commit才算真正把文件提交到git仓库里 再次更改1.txt git status //查看当前仓库中的状态,好比是否有改动的文件 git diff 1.txt //能够对比1.txt本次修改了什么内容,相比较仓库里面的版本
当没有须要添加或提交到仓库的文件时的仓库状态vim
版本回退centos
git log //查看全部提交记录
版本从下往上看(更早的版本在下面)浏览器
git log --pretty=oneline //一行显示 git reset --hard fbb2012 //回退版本,其中后面跟的字符串能够是简写 git reflog //查看全部历史版本
rm -f 1.txt //若是不当心删除了1.txt git checkout -- 1.txt//恢复1.txt , 文件存在代码管理库中 若是1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可使用git reset HEAD 1.txt,能够把add的标记去掉,再执行git checkout -- 1.txt
git rm 2.txt git commit -m "rm 2.txt" 在库中删除
2、创建远程仓库
首先到 https://github.com 注册一个帐号,建立本身的git库,点右上角加号->new repository 名字自定义,此处仓库名为test1,选择public 点 create repository 增长秘钥,添加key:右上角点本身头像,选择settings,左侧选择SSH and GPG keys 点New SSH key,把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里
生成公钥:
把本地仓库推送到远程仓库:
在本地建立test1目录
能够按照页面中在本地新建目录作设置
git push -u origin master 把本地的test1仓库推送到远程的test1,输入远程git的用户名密码
下一次再推送,就能够直接 git push
回到页面上刷新:
3、克隆远程仓库
克隆地址:
cd /home 把远程的test1库直接克隆到home下 git clone https://github.com/tobej/test1.git
进入到刚刚克隆的目录后,对文件进行修改,在推送到远程仓库后,会在页面显示修改的内容
也能够在远程仓库进行文件的修改,修改完成后点击提交便可
git pull 把远程的拉取到本地,此时已是修改过的文件
4、分支管理
使用分支的原则
对于分支的应用,建议你们以这样的原则来: master分支是很是重要的,线上发布代码用这个分支,平时咱们开发代码不要在这个分支上。 建立一个dev分支,专门用做开发,只有当发布到线上以前,才会把dev分支合并到master 开发人员应该在dev的基础上再分支成我的分支,我的分支(在本身pc上)里面开发代码,而后合并到dev分支dev分支合并bob分支的命令是: git checkout dev //先切换到dev分支,而后 git merge bob
git branch //查看分支 git branch tobe //建立分支,* 在master上,说明如今还在master分支上 git checkout tobe //切换到tobe分支下
此时已经切换到了tobe分支,编辑3.txt,会提交到tobe分支
在切换回master分支
git checkout master //此时并无3.txt
分支的合并:
git checkout master //合并分支以前,先切换到目标分支 git merge tobe //把tobe分支合并到master,此时在tobe分支下作的变动,合并到master
解决冲突的办法:
若是master分支和tobe分支都对3.txt进行了编辑,当合并时会提示冲突,须要先解决冲突才能够继续合并。
解决冲突的方法是在master分支下,编辑3.txt,把两个分支的内容改成同样的(改成tobe分支里面3.txt的内容)。 而后提交3.txt,再合并tobe分支。
可是这样有一个问题,万一master分支更改的内容是咱们想要的呢? 能够编辑3.txt内容,改成想要的,而后提交。切换到tobe分支,而后合并master分支到tobe分支便可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字必定是最新的分支。
两个红框中的内容分别表明两个分支中的文件内容,当两个分支中的内容不一致时,没法切换分支
把master分支中的3.txt修改为和tobe分支中的3.txt内容一致,而后添加、提交便可
git branch -d tobe //删除分支,须要切换出要删除的分支 若是分支没有合并,删除以前会提示,那就不合并,强制删除 git branch -D tobe
5、远程分支管理
建立新的分支
把以前拉取到本地的test1删除,从新拉取到home下,此时只有一个分支 本地新建的分支若是不推送到远程,对其余人就是不可见的 查看远程分支 git ls-remote origin,能够看到全部分支
git clone的时候默认只把master分支克隆下来,若是想把全部分支都克隆下来,须要手动建立,在本地建立和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致
对于git push分支分两种状况: 当本地分支和远程分支一致时,git push会把全部本地分支的变动一同推送到远程,若是想只推送一个分支,使用git push origin branch-name。 当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name 若是推送失败,先用git pull抓取远程的新提交。 本地建立一个dev2分支,此时远程没有dev2,切换到dev2分支下,建立3.txt,此时添加、提交,并git push会提示没有任何修改 git push origin dev2 把本地分支推送到远程
推送到远程分支后,刷新页面,切换到dev2下,有3.txt文件
6、标签管理
标签相似于快照功能,能够给版本库打一个标签,记录某个时刻库的状态。也能够随时恢复到该状态。
git checkout master 先切到master分支上 git tag v1.0 给master打一个标签v1.0 git show v1.0 查看标签信息 git tag 能够查看全部的标签 git log --pretty=oneline --abbrev-commit //先查看历史的commit
tag是针对commit来打标签的,因此能够针对历史的commit来打tag git tag v0.9 //针对历史commit打标签
git tag -a v0.1 -m "first tag" 9586cad 能够对标签进行描述
git tag -d v0.8 //删除标签
git push origin v1.0 //推送指定标签到远程 git push --tag origin //推送全部标签
若是本地删除了一个标签,远程也想要删除须要这样操做:
git tag -d v0.8 //删除本地标签 git push origin :refs/tags/v0.8 //删除远程标签
7、git别名
git config --global alias.ci commit commit别名设置为ci git config --global alias.br branch branch别名设置为br
查看git全部别名
git config --list |grep alias
vim /root/.gitconfig 也能够在配置文件中添加,最好使用命令行添加
查询log小技巧:
会自动配置到配置文件中
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git lg lg为log别名
取消别名
git config --global --unset alias.br
8、 搭建git服务器
github毕竟是公开的,而私有仓库又得花钱买。因此咱们能够想办法搭建一个私有的,只本身公司使用的。Gitlab是个不错的选择。在介绍它以前,先讲述一下命令行的git服务器,
找一台服务器002做为服务端,001做为客户端
首先要安装git,yum install -y git 添加git用户,而且设置shell为/usr/bin/git-shell,目的是为了避免让git用户远程登录 useradd -s /usr/bin/git-shell git cd /home/git 建立authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥 mkdir .ssh touch .ssh/authorized_keys chown -R git.git .ssh chmod 600 .ssh/authorized_keys vim .ssh/authorized_keys 首先要把001客户端上的公钥放到git服务器002上:/home/git/.ssh/authorized_keys文件里
在001使用ssh链接
ssh git@192.168.183.33 说明验证成功,不容许直接登陆
在服务端002建立git的仓库
mkdir /data/gitroot cd /data/gitroot git init --bare sample.git // 会建立一个裸仓库,裸仓库没有工做区,由于服务器上的Git仓库纯粹是为了共享,因此不让用户直接登陆到服务器上去改工做区,而且服务器上的Git仓库一般都以.git结尾 chown -R git.git sample.git 设置属主属组 以上操做是在git服务器上作的,平时git服务器是不须要开发人员登陆修改代码的,它仅仅是充当着一个服务器的角色,就像github同样,平时操做都是在咱们本身的pc上作的
在客户端上(本身pc)克隆远程仓库:
git clone git@192.168.183.33:/data/gitroot/sample.git 后面的目录为002上的git目录 直接把本地分支推送到远程会出现下图的报错,由于仓库是裸仓库,因此也没有分支,须要在push的时候把分支加上,下次再push时,直接push便可 git push origin master 此时就能够在当前目录下生成一个sample的目录,这个就是咱们克隆的远程仓库了。进入到这里面,能够开发一些代码,而后push到远程。
在tmp目录下在克隆一次,进行测试,此时在上一个目录建立并push的文件都会克隆下来
在/tmp/sample/目录下编辑1.txt 添加并提交、git push 回到/root/sample/ git pull 会把新的拉取下来
9、安装gitlab
gitlab官网 https://about.gitlab.com/gitlab-com/
官方安装文档 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee) ee为企业版,ce社区版
要求服务器内存很多于2g
vim /etc/yum.repos.d/gitlab.repo//加入以下内容
[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1 安装gitlab以前,最好把nginx停掉,还有redis,由于配置gitlab时,也会启动一个nginx和其余的服务 /etc/init.d/nginx stop chkconfig nginx off yum install -y gitlab-ce gitlab-ctl reconfigure 自动配置gitlab,而且会把全部gitlab有关的服务启动起来ps aux |grep git netstat -lnpt //查看监听端口 gitlab-ctl stop/restart/start/status
浏览器访问gitlab,输入ip便可
默认管理员root,无密码,会直接让更改密码,更改完成后会跳转到登陆界面,登陆便可
10、使用gitlab
ls /var/opt/gitlab/nginx/conf/nginx.conf 主配置文件 ls /var/opt/gitlab/nginx/conf/gitlab-http.conf gitlab相关的配置文件,能够更改监听端口及server_name
经过更改server_name实现用域名访问
登陆到gitlab页面后,先建立组,在建立项目(Project)
项目建立完成后,提示:
须要添加Key即公钥
添加Key,点击头像->settings->SSH Keys
建立用户:
点击以下图所示图标
能够建立项目,用户,组
11、gitlab备份和恢复
gitlab备份:
gitlab-rake gitlab:backup:create gitlab备份,备份全部的项目,组,用户,备份和恢复要版本一致 备份目录在/var/opt/gitlab/backups
gitlab 恢复:
先停服务: gitlab-ctl stop unicorn;gitlab-ctl stop sidekiq 停掉这两个服务在那时不作变动 gitlab-rake gitlab:backup:restore BACKUP=xxxxx (这里是一个编号,即备份文件的前缀) 再启动服务 gitlab-ctl start