一.GIT基础

1.1 git简介

  • linus用C语言编写
  • 2005年诞生
  • 分布式管理系统
  • 速度快、适合大规模、跨地区多人协同开发

1.2 本地管理、集中式、分布式

1.3 git安装

 #CentOS上安装
[root@linux-node1 ~]# yum -y install git
#Ubuntu上安装
[root@linux-node1 ~]# apt-get install git

注:生产环境中,不建议这么安装,yum装的git版本是1.8,推荐使用2.7版本


编译安装:

 #安装依赖包
[root@linux-node1 ~]# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
#下载安装包
[root@linux-node1 ~]# wget https://github.com/git/git/archive/v2.7.4.zip
#解压
[root@linux-node1 ~]# unzip git-2.7./
#进入git目录
[root@linux-node1 ~]# cd git-2.7./
#编译
[root@linux-node1 git-2.7.]# make prefix=/usr/local/git all
#安装
[root@linux-node1 git-2.7.]# make prefix=/usr/local/git install
#删除原有git命令
[root@linux-node1 git-2.7.]# rm -rf /usr/bin/git
#软连接编译安装git命令
[root@linux-node1 git-2.7.]# ln -s /usr/local/git/bin/git /usr/bin/git
#查看git版本
[root@linux-node1 git-2.7.]# git --version
git version 2.7.

1.4 git初始化

 #创建gittest目录
[root@linux-node1 ~]# mkdir gittest
#进入目录
[root@linux-node1 ~]# cd gittest
#初始化git仓库
[root@linux-node1 gittest]# git init
Initialized empty Git repository in /root/gittest/.git/
#配置基础用户信息
[root@linux-node1 gittest]# git config --global user.name "goodcook"
#配置基础用户邮件信息
[root@linux-node1 gittest]# git config --global user.email "goodcook@qq.com"

1.5 查看基本信息

 #查看基本信息
[root@linux-node1 gittest]# git config --list
user.name=goodcook
user.email=goodcook@qq.com
core.repositoryformatversion=
core.filemode=true
core.bare=false
core.logallrefupdates=true

1.6 git区域

  • 远程仓库

  • 本地仓库

  • 暂存区域

  • 工作目录

1.7 四种状态

  git如何进行版本管理的呢?它对管理的文件,会打上一个标识,这个标识,就分为四种状态。

  • untracked(未被追踪的文件)

   第一次放到库中的文件,文件与库没有任何的关联,还没有纳入系统管理版本的序列中。使用 git add将该类文件推送到暂存区,状态就变成了staged。

  • unmodified(未被修改的文件)

  未被修改的文件,增加新代码(修改)之后,会重新拉倒工作目录中。

  • modified(修改后的文件)

  修改之后,将该文件git add加入到暂存区,再通过commit放入本地库中。

  • staged(暂存区的文件)

  使用git commit将该类文件提交,变成unmodified(未被修改的文件),从暂存区,将文件放到本地仓库中。

流程:

1.新文件,放到git目录中(untracked 未被追踪的文件)

2.使用git add将未被追踪的文件推送到暂存区(staged 暂存区文件)

3.使用git commit将暂存区文件提交到本地仓库中(unmodified 未被修改的文件)

4.此时如果修改文件(modified 修改的文件),然后再用git add将修改后的文件加入到暂存区(staged)

5.然后再提交git commit到本地仓库变成(unmodified 未被修改的文件)...周而复始

1.8 git常用命令

git add            加入暂存区(索引区)

git status           查看状态

git status -s         状态概览

git diff            尚未暂存的文件

git diff --staged       暂存区文件

git commit           提交更新

git reset           回滚

git rm             从版本库中移除

git rm --cached         从暂存区中移除

git mv             相当于mv 、git rm 、git add三个命令

 #创建一个文件
[root@linux-node1 gittest]# touch index.html
#编辑index.html
[root@linux-node1 gittest]# vim index.html
<h1> welcome to my index </h1>
#使用git status查看该文件状态
[root@linux-node1 gittest]# git status
  On branch master   Initial commit   Untracked files: #此时状态为未被追踪的文件
    (use "git add <file>..." to include in what will be committed)         index.html   nothing added to commit but untracked files present (use "git add" to track)
#加入代码库
[root@linux-node1 gittest]# git add index.html
#再次查看状态
[root@linux-node1 gittest]# git status
  On branch master   Initial commit   Changes to be committed:
    (use "git rm --cached <file>..." to unstage)         new file:   index.html
#提交
[root@linux-node1 gittest]# git commit -m "first commit"
[master (root-commit) 6f3aca3] first commit
file changed, insertion(+)
create mode index.html
#再次查看状态
[root@linux-node1 gittest]# git status
  On branch master
  nothing to commit, working directory clean #此时的状态是工作目录中没有还没有提交的文件了

二.分支管理

2.1 创建一个分支

 #创建一个分支
[root@linux-node1 gittest]# git branch about
#查看状态
[root@linux-node1 gittest]# git status
On branch master #还是在master上
#切换分支
[root@linux-node1 gittest]# git checkout about
Switched to branch 'about'
#查看状态
[root@linux-node1 gittest]# git status
On branch about

2.2 分支命令

git branch            查看分支

git branch -v           详细查看

git branch --merged        查看哪些分支已经被融合

git branch --no-merged      查看哪些分支还没有被融合

git branch -d           删除分支

git checkout           切换分支

git merge             融合分支(将分支代码融合到主干)

git log              查看提交事件

git stash             暂存区

git tag              打标签

三.远程仓库

3.1 将github上的代码拉到本地

 #拉代码
[root@linux-node1 ~]# git clone https://github.com/zzgxgit/saltstack-apache.git
Cloning into 'saltstack-apache'...
remote: Counting objects: , done.
remote: Total (delta ), reused (delta ), pack-reused
Unpacking objects: % (/), done.
Checking connectivity... done.
#进入库目录
[root@linux-node1 ~]# cd saltstack-apache/
#查看状态
[root@linux-node1 saltstack-apache]# git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

3.2 修改文件并push

 #查看目录内容
[root@linux-node1 saltstack-apache]# ll
total
drwxr-xr-x root root May : modules
-rw-r--r-- root root May : README.md
#编辑README.md
[root@linux-node1 saltstack-apache]# vim README.m
#增加一行内容
test git push
#添加到staged
[root@linux-node1 saltstack-apache]# git add .
#提交
[root@linux-node1 saltstack-apache]# git commit -m "edit README.md"
[master 6370f89] edit README.md
file changed, insertion(+)
#远程库
[root@linux-node1 saltstack-apache]# git remote
origin
#查看详细信息
[root@linux-node1 saltstack-apache]# git remote -v
origin https://github.com/zzgxgit/saltstack-apache.git (fetch)
origin https://github.com/zzgxgit/saltstack-apache.git (push)
#推送到远程库
[root@linux-node1 saltstack-apache]# git push origin master
#输入账号
Username for 'https://github.com': zzgxgit
#输入密码
Password for 'https://zzgxgit@github.com':
Counting objects: , done.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | bytes/s, done.
Total (delta ), reused (delta )
To https://github.com/zzgxgit/saltstack-apache.git
a6443a5..6370f89 master -> master

3.3 给本地库添加远程信息

 #进入之前初始化的本地库
[root@linux-node1 ~]# cd gittest/
#查看远程信息(没有任何信息)
[root@linux-node1 gittest]# git remote
[root@linux-node1 gittest]# git remote -v
#添加远程库信息
[root@linux-node1 gittest]# git remote add origin http://192.168.100.1/goodcook.git
#查看信息
[root@linux-node1 gittest]# git remote
origin
[root@linux-node1 gittest]# git remote -v
origin http://192.168.100.1/goodcook.git (fetch)
origin http://192.168.100.1/goodcook.git (push)
#可以添加多个远程库
[root@linux-node1 gittest]# git remote add gitlab http://192.168.100.2/goodcook.git
#查看信息
[root@linux-node1 gittest]# git remote
gitlab
origin
[root@linux-node1 gittest]# git remote -v
gitlab http://192.168.100.2/goodcook.git (fetch)
gitlab http://192.168.100.2/goodcook.git (push)
origin http://192.168.100.1/goodcook.git (fetch)
origin http://192.168.100.1/goodcook.git (push)

3.4 手动打标签

 #查看标签(为空)
[root@linux-node1 gittest]# git tag
#查看一下提交信息
[root@linux-node1 gittest]# git log
commit 6f3aca32bfe6caeb69be9c8b4caa856eedd495ed
Author: goodcook <goodcook@qq.com>
Date: Thu May :: + first commit
#打标签(添加一个1.0的版本信息)
[root@linux-node1 gittest]# git tag -a v1. -m "version"
#查看标签
[root@linux-node1 gittest]# git tag
v1.

四. gitlab安装配置

4.1 安装gitlalb

 #安装依赖
[root@linux-node1 ~]# yum -y install curl policycoreutils openssh-server openssh-clients
#sshd开机自启
[root@linux-node1 ~]# systemctl enable sshd
#启动sshd
[root@linux-node1 ~]# systemctl start sshd
#安装postfix
[root@linux-node1 ~]# yum install postfix
#设置开机自启
[root@linux-node1 ~]# systemctl enable postfix
#启动
[root@linux-node1 ~]# systemctl start postfix
#安装gitlab8.9.5
[root@linux-node1 ~]# rpm -ivh gitlab-ce-8.9.-ce..el7.x86_64.rpm
  Preparing...                          ################################# [100%]
  Updating / installing...
     1:gitlab-ce-8.9.5-ce.0.el7         ################################# [100%]

4.2 配置文件

 #编辑配置文件
[root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb
#修改URL(没有域名就用IP)
external_url 'http://192.168.56.11'
#自动化配置
[root@linux-node1 ~]# gitlab-ctl reconfigure

4.3 访问gitlab

打开浏览器,输入刚才配置的URL:192.168.56.11

设置一个密码,不能太短:ABCD1234

【登录】

用户名:root

密码:ABCD1234

至此,gitlab就安装完成了。

4.4 gitlab常用命令

gitlab-ctl status            查看各组件状态

gitlab-ctl start             开启服务

gitlab-ctl stop             停止服务

gitlab-ctl restart            重启服务

gitlab-ctl tail <service>        查看某一组件日志  例:gitlab-ctl tail nginx

4.5 gitlab组件介绍

nginx                  静态web服务器

gitlab-shell               用于处理git命令和修改authorized keys列表

logrotate                日志文件管理工具

gitlab-workhorse             轻量级的反向代理服务器

postgresql                数据库

redis                  缓存

sidekiq                 用于在后台执行队列任务(异步执行)

unicorn                 gitlab rails应用是托管在这个服务器上面的

4.6 gitlab常用目录介绍

/var/opt/gitlab/git-data/repositories/root/      库默认存储目录

/opt/gitlab/                      应用代码和相应的依赖程序

/var/opt/gitlab/                    使用gitlab-ctl reconfigure命令编译后的应用数据和配置文件,不需要人为修改配置

/etc/gitlab/                      配置文件目录

/var/log/gitlab/                    存放各个组件的日志目录

/var/opt/gitlab/backups/                备份文件生成的目录

五.gitlab管理操作

5.1创建工程

单击右上角的扳手图标

单击new group 创建一个组

创建组

创建用户

按要求创建用户按照此法 创建 dev1和dev2用户

单机进去,查看用户

回到组的页面

给 pm 用户授权为 master

进入项目页面

创建一个java1的项目

设置权限

配置ssh-key

 #创建一个秘钥对
[root@linux-node1 .ssh]# ssh-keygen
#查看公钥并拷贝
[root@linux-node1 .ssh]# cat id_rsa.pub

将公钥加入后点击Add key

六. gitlab备份和恢复

6.1 配置文件

 #编辑配置文件
[root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb
#备份目录
gitlab_rails['backup_path'] = "/data/backups/gitlab"
#备份保留7天
gitlab_rails['backup_keep_time'] =
#创建备份目录
[root@linux-node1 ~]# mkdir -p /data/backups/gitlab
#改完配置重新自动化生成
[root@linux-node1 ~]# gitlab-ctl reconfigure
#重启服务
[root@linux-node1 ~]# gitlab-ctl restart
#授权
[root@linux-node1 ~]# chown -R git:git /data/backups/gitlab/
#添加定时任务
[root@linux-node1 ~]# crontab -e
#每天2点全备一次
* * * /usr/bin/gitlab-rake gitlab:backup:create &>/dev/null

6.2 备份测试

 #手动执行一次
[root@linux-node1 ~]# gitlab-rake gitlab:backup:create
#查看备份
[root@linux-node1 ~]# ll /data/backups/gitlab/
  total 40
  -rw------- 1 git git 40960 May  5 03:37 1493926679_gitlab_backup.tar

6.3 恢复数据

6.3.1删除项目

6.3.2 恢复操作

 #要停两个服务
[root@linux-node1 ~]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@linux-node1 ~]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up
#恢复备份
[root@linux-node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=
#备份完,启动服务
[root@linux-node1 ~]# gitlab-ctl start unicorn
ok: run: unicorn: (pid ) 1s
[root@linux-node1 ~]# gitlab-ctl start sidekiq
ok: run: sidekiq: (pid ) 0s

打开页面:


注:恢复操作中的 “BACKUP=1493926679”  是备份时候生成的备份文件名前面的时间戳。


七. gitlab邮件配置

7.1 配置文件

 #编辑配置文件
[root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'goodcook@126.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.126.com"
gitlab_rails['smtp_port'] =
gitlab_rails['smtp_user_name'] = "goodcook"
gitlab_rails['smtp_password'] = "your_password"
gitlab_rails['smtp_domain'] = "126.com"
gitlab_rails['smtp_authentication'] = "login"

【开源是一种精神,分享是一种美德】

— By GoodCook

— 笔者QQ:253097001

— 欢迎大家随时来交流

—原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

【持续集成】GIT+jenkins+snoar——GIT的更多相关文章

  1. 老李分享:持续集成学好jenkins之Git和Maven配置

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  2. 老李分享:持续集成学好jenkins之Git和Maven配置 1

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  3. 老李分享:持续集成学好jenkins之Git和Maven配置 2

    8.检查代码更新并编译 可以通过Poll SCM来设置定时检查编译功能 比如*/5 * * * * 就是每隔5分钟检查一次,如果git仓库中有更新,则执行build操作. 9.使用Maven私服加快下 ...

  4. 【持续集成】jenkins安装部署从git获取代码

    一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 1. ...

  5. Android持续集成之Jenkins 部署

    Android持续集成之Jenkins 部署 [TOC] 0x00安装 准备工作如下: Tomcat8.5下载地址 Jenkins下载链接 1 将下载的jenkins.war包放至tomcat下的we ...

  6. 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本

    持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...

  7. 持续集成之Jenkins+Gitlab实现持续集成 [二]

    持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将 ...

  8. 有手就行2——持续集成环境—Jenkins安装、插件、用户权限及凭证管理

    有手就行2--持续集成环境-Jenkins安装.插件.权限及凭证管理 持续集成环境(1)-Jenkins安装 持续集成环境(2)-Jenkins插件管理 持续集成环境(3)-Jenkins用户权限管理 ...

  9. 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

    安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclips ...

随机推荐

  1. Angular2开发拙见——组件规划篇

    本文集中讲讲笔者目前使用ng2来开发项目时对其组件的使用的个人的一些拙劣的经验. 先简单讲讲从ng1到ng2框架下组件的职责与地位: ng1中的一大特色--指令,分为属性型.标签型.css类型和注释型 ...

  2. jQuery中jsonp函数实现

    由于浏览器中的同源策略,不同的域名,不同的协议,甚至不同的端口都无法请求数据.因此出现了浏览器跨域请求数据问题. Jsonp是解决跨域问题的一个非常流行的方法. JSONP(JSON with Pad ...

  3. JS调用WebService,发布到IIS,网页提示WebService未定义[已解决]

    VS2013中,JS调用WebService,一直运行正常.部署到WindowsServer2008之后,在网页中访问,始终提示网页中有错误,点开之后发现是WebService未定义. 于是上网查解决 ...

  4. llinux svn安装

    1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) [plain] view plain copy print? sudo apt-get  ...

  5. 改变iOS app的icon(iOS10.3)

    改变iOS app的icon 官方 iOS10.3新增了可以让开发者去更改app的icon,接下来看看怎么更改. 官方API给的东西很少,只是介绍了一个实例方法: open func setAlter ...

  6. 浩哥解析MyBatis源码(六)——DataSource数据源模块之池型数据源

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675674.html 1 回顾 上一文中解读了MyBatis中非池型数据源的源码,非池型也 ...

  7. (iOS)开发中收集的小方法

    1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color {     CGRect rect = CGRectMake(0.0f, 0. ...

  8. Entity Framework快速入门--IQueryable与IEnumberable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...

  9. 我的iOS博客旅行开始了,欢迎光临!

    期待您的关注!

  10. Java线程池(ThreadPool)详解

    线程五个状态(生命周期): 线程运行时间 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间.    如果:T1 + T3 远大于 T2,则可以 ...