GitLab版本管理工具
第1章 GitLab管理
1.1 版本控制系统
版本控制系统(version control system)是记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制,广泛应用的如svn,git等
1.2 常见版本管理工具
1.2.1 SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或备份文件
1.2.2 Git
分布式的版本控制系统,在每个使用者电脑上就有完整的数据仓库,没有网络依然可以使用。为了习惯及团队协作,会将本地数据同步到Git服务器或GitHub等代码仓库
第2章 Git软件安装
2.1 配置安装GIT
Git是分布式的版本控制系统,我们只要有一个原始Git版本仓库,就能让其他主机克隆这个原始版本仓库,从而使一个Git版本仓库可以被同时分布到不同主机上,并且每台主机的版本库都是一样的,没有主次之分
这极大的保证了数据安全性,并使得用户能够自主选择向Git服务器推送文件
官网:https://git-scm.com
2.1.1 准备环境
[root@gitlab ~]# rpm -qa centos-release
centos-release--4.1708.el7.centos.x86_64
[root@gitlab ~]# uname -a
Linux gitlab 3.10.-.el7.x86_64 # SMP Tue Aug :: UTC x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab ~]# getenforce
Disabled
[root@gitlab ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld()
2.1.2 安装查看git
[root@gitlab ~]# rpm -qa git # Centos系统自带git软件,故无需安装 git-1.8.3.1-.el7.x86_64 yum install -y git #没有则进行安装
2.2 初次运行Git前的配置
2.2.1 Git全局配置
git config --global user.name "banana" #配置git使用用户
git config --global user.email "XXXX@XX.com" #配置git使用邮箱
git config --global color.ui true #语法高亮,显示加颜色
git config --list #查看全局配置
2.2.2 查看配置文件
[root@gitlab ~]# cat .gitconfig #上述操作即对配置文件进行的编辑
[user]
name = banana
email = XXXX@XX.com
[color]
ui = true
第3章 GitLab使用
3.1 初始化工作目录
用来存放所有笔记代码等,其中目录下具备隐藏目录,存放历史记录和备份(密文存在)
mkdir git_data #创建并进入本地工作目录
cd git_data/
git init #初始化工作目录
[root@gitlab git_data]# git status #查看git工作区的状态信息
# On branch master ->当前处于主分支
# Initial commit ->最初的提交
nothing to commit (create/copy files and use "git add" to track) ->无文件要提交
3.2 创建/提交数据文件
01.创建文件
touch README
02.查看git状态
[root@gitlab git_data]# git status
# On branch master ->位于分支 master
# Untracked files: ->未跟踪的文件
# (use "git add <file>..." to include in what will be committed) ->使用"git add <file>."以包含要提交的内容
# README
nothing added to commit but untracked files present (use "git add" to track) ->提交为空,但是存在尚未跟踪的文件(使用"git add"建立跟踪) 注意:git默认不提交空目录
03.添加到暂存区域[add后接*/file]
git add README
04.提交暂存区域文件至git本地仓库
git commit -m 'first commit'
# -m后接注释信息,内容关于本次提交的说明,方便自己或他人查看
04.1简便方法
git commit -a -m "注释信息"
#若不加-m添加说明信息,后面会自动进入编辑模式,仍需添加说明的信息。
#-a表示直接添加文件(即本地仓库的原有文件后来经过改变时,我们就可以使用-a直接在仓库里面进行修改)
05.再次查看git状态
[root@gitlab git_data]# git status # On branch master ->位于分支master nothing to commit, working directory clean ->无文件要提交,干净的工作区
3.2.1 查看目录内容
[root@gitlab git_data]# tree .git/ #存储所有历史版本信息即配置文件,是通过git init生成的目录
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── objects
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 #服务器只存储加密文件信息
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
总结提交数据/文件分为两步骤三区域:
在工作目录git_data创建"README"数据文件;使用git add将文件提交到暂存区域(临时存放可撤销操作);将暂存区域的文件统一提交到Git仓库中
3.2.2 工作原理
我们可以简单的把工作目录理解成是一个被Git服务程序管理的目录,Git会时刻追踪目录内文件的改动。在安装好Git服务程序后,默认就会创建一个master分支,可供我们直接提交数据
3.3 暂存区数据操作
3.3.1 git删除数据
01. 未添加到暂存区的数据->直接使用rm命令删除即可
02.已添加到暂存区的数据
git rm --cached database #将文件从git暂存区域的追踪列表移除,并不删除当前工作目录内的数据文件->只删除缓存 git rm -f database #将文件数据从git暂存区和工作目录一起删除->永久删除
3.3.2 git重命名数据
01.未添加到暂存区的数据->直接mv/rename改名即可
02.已添加到暂存区数据
git mv README NOTICE # README修改前/NOTICE修改后;最后进行提交git仓库 注意:也可mv修改名称→删除git仓库的文件快照git rm '*.txt'→将新的文件添加进去→提交git仓库
3.4 历史记录数据
3.4.1 查看历史记录
git log #查看提交历史记录
git log - #查看最近几条记录
git log -p - #-p显示每次提交的内容差异,例如仅查看最近一次差异
git log --stat - #--stat简要显示数据增改行数(能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息)
git log --pretty=oneline #--pretty根据不同的格式展示提交的历史信息
git log --pretty=fuller - #以更详细的模式输出提交的历史记录
git log --pretty=fomat:"%h %cn" #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名
使用format参数来指定具体的输出格式
%s 提交说明
%cd 提交日期
%an 作者的名字
%cn 提交者的姓名
%ce 提交者的电子邮件
%H 提交对象的完整SHA-1哈希字串
%h 提交对象的简短SHA-1哈希字串
%T 树对象的完整SHA-1哈希字串
%t 树对象的简短SHA-1哈希字串
%P 父对象的完整SHA-1哈希字串
%p 父对象的简短SHA-1哈希字串
%ad 作者的修订时间
3.4.2 还原历史记录
Git服务程序中有一个版本指针HEAD,当用户申请还原数据时,将HEAD指针指向到某个特定的提交版本。但Git为避免历史记录冲突用SHA-1算出十六进制的哈希字串来区分提交版本。默认HEAD指针会指向到最近一次提交记录,上一个提交版本即HEAD^,上上一个版本即HEAD^^ (HEAD~5简化表示往上数第五个提交版本)
git reset --hard HEAD^ #还原历史提交版本上一次 git reset --hard 3de15d4 #找到历史还原点的SHA-1值后,就可以还原(值未写全时系统会自动匹配)
3.4.3 还原未来数据
即还原到历史数据后想再次撤销更改,但是git log已经找不到这个版本了
git reflog #查看未来历史更新点
3.4.4 标签使用(于commit之后)
git tag v1. #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag
git tag #查看当前所有的标签
git show v1. #查看当前1.0版本的详细信息
git tag v1. -m "version 1.2 release is test"
#对当前版本(最新)打标记,用于commit提交之后接着进行打标记(-a指定标签名,-m为说明信息)
git tag -d v1. #我们为同一个提交版本设置了两次标签,删除之前的v1.
[root@gitlab git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@gitlab git_data]# git reset --hard V20171130
HEAD is now at a66370a add oldboy dir
3.5 分支管理
在实际的项目开发中尽量保证master分支稳定,仅用于发布新版本,平时不要直接修改里面的数据文件。而开发都在dev分支进行修改,即每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后合并到master分支
3.5.1 创建分支
git branch linux #创建分支
git branch #查看分支情况,当前分支前有*号
git checkout linux #Switched to branch 'linux' 切换分支
git checkout --<file> #一键还原,直接将git仓库的文件覆盖当前文件[危险]
3.5.2 合并分支(自动合并)
需求:把linux的工作成果合并到master分支上
git checkout master #切换到master分支 git merge linux #合并Linux分支至master git branch -d linux #确认合并完成后,建议删除分支
注意:系统默认不编辑空分支
3.5.3 合并冲突模拟(手动合并)
注意:只有同目录同文件同行才会造成合并冲突的情况,只要有一点不同就能够进行合并
01.准备:
cd git_data
echo 'master code' >>README
git commit -a -m 'this master branch commit'
git checkout linux
cat README echo 'linux code' >>README
git commit -a -m 'this linux branch second commit'
git checkout master
02.现象:
[root@gitlab git_data]# git merge linux
Auto-merging README ->自动合并 README
CONFLICT (content):Merge conflict in README ->冲突(内容):合并冲突于 READM
Automatic merge failed; fix conflicts and then commit the result.
->自动合并失败;修正冲突然后提交修正的结果
03.解决:人工选择想要的内容,同时修改master和linux分支同文件并提交,最后merge
[root@gitlab git_data]# vim README
this is linux branch hello world
master code
linux code
[root@gitlab git_data]# git commit -a -m '解决合并冲突'
[master 19cb918] 解决合并冲突
[root@gitlab git_data]# git merge linux
Already up-to-date.
3.6 删除分支
由于之前已合并了linux分支,故现在看到它在列表中,在这个列表中分支名字前没*号的分支通常可用git branch -d删除且不会失去任何东西
[root@gitlab git_data]# git branch --no-merged #查看所有包含未合并工作的分支
testing
[root@gitlab git_data]# git branch -d testing ->删除分支
error: The branch 'testing' is not fully merged. ->分支'testing'未进行合并
If you are sure you want to delete it, run 'git branch -D testing'. ->若确定想删除它,即使用-D强制删除
第4章 客户端安装软件
软件下载地址https://github.com/git-for-windows/git/releases/tag/v2.10.0.windows.1/Git-2.10.0-64-bit.exe
4.1 windows上安装Git
用于直接管理windows。安装方法默认下一步→桌面右键"Git Bash Here"→命令行
shine@shine MINGW64 ~/Desktop
$ pwd
/c/Users/shine/Desktop
shine@shine MINGW64 ~/Desktop
$ mkdir git_data
shine@shine MINGW64 ~/Desktop
$ cd git_data
shine@shine MINGW64 ~/Desktop/git_data
$ git init
Initialized empty Git repository in C:/Users/shine/Desktop/git_data/.git/
01.桌面右键"Git Gui Here"→"打开文件"
02.定义仓库的路径"git_data"→添加用户信息(如下)
shine@shine MINGW64 ~/Desktop/git_data
$ git config --global user.email "XXXXX@XX.com"
shine@shine MINGW64 ~/Desktop/git_data
$ git config --global user.name "banana"
03.软件使用
至此,Git的安装使用完成
4.2 linux上安装GitLab
交互数据:
• 使用GitHub或者码云等公共代码仓库
• 使用GitLab私有仓库
官方安装文档 https://about.gitlab.com/installation/ 国内软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
mkdir -p /application/tools
cd /application/tools
rz -E #上传gitlab-ce-9.1.-ce..el7.x86_64.rpm yum localinstall gitlab-ce-9.1.-ce..el7.x86_64.rpm
gitlab-ctl reconfigure #初始化,仅执行一次
注意:gitlab默认开机自启,无需修改;开机不自启会导致软件服务无法启动
4.2.1 web网页测试
http://10.0.0.63
命令行测试:
ps -ef netstat -lntup gitlab-ctl status 注意:软件安装默认在/opt下,其数据库为postgresql;当该机器有apache服务需手动关闭
注意:创建密码默认即为8位,生产环境太过简单不可用;账户默认root
提示:git本身没有任何权限控制,因为git就是为了开发者共同编辑代码而出现,如果没有权限,也会导致信息泄露,于是出现web界面
4.2.2 网页页面使用
01.创建新项目
说明:一个目录初始化完就是一个项目,不能再进行修改,只能进行重新创建
02.进行网页编辑
03.通过密钥进行认证
ssh-keygen #生成密钥对(一路回车) cat /root/.ssh/id_rsa.pub #查看公钥id_rsa.pub值并添加如下:
04.连接推送测试
ssh git@10.0.0.63
git clone git@10.0.0.63:root/shine.git
ls /root
#在哪个目录克隆的就默认存在于那个目录(想切换到别的目录需提前切换再git clone)
cd shine #这里名称与上文相同
touch README.md
git add README.md
git commit -m "add README"
[root@gitlab shine]# git push -u origin master #把本地代码向远端仓库(gitlab网页)推送
Counting objects: , done.
Writing objects: % (/), bytes | bytes/s, done.
Total (delta ), reused (delta )
To git@10.0.0.63:root/shine.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
刷新页面查看,即下图
05.创建文件测试
cd shine/ git pull #将代码拉取到本地(需要在git的工作目录中进行操作)
至此,GitLab的安装使用完成
4.3 安装GitHub托管服务
Github是Git版本库的托管服务,是目前全球最大的公网仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径。不仅可以托管各种Git版本仓库,还拥有更美观的Web界面。代码可被任何人克隆,使开发者为开源项贡献代码变得容易
01.注册GitHub
浏览器访问github官网https://github.com/
02.填写个人用户名等信息→默认下一步→跳过描述
03.创建项目
说明:创建新的项目之前要现验证邮箱
04.添加git服务器上生成的公钥id_rsa.pub
[root@gitlab ~]# cat .ssh/id_rsa.pub
05.准备工作已经完毕→创建一个新的仓库
06.根据以下信息创建代码仓库→推送测试
mkdir -p banana
cd banana/
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:banana-tong/test.git
推送测试
[root@gitlab banana]# git push -u origin master
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:::ac:a5:::2d:::1b::4d:eb:df:a6:.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
Counting objects: , done.
Writing objects: % (/), bytes | bytes/s, done.
Total (delta ), reused (delta )
To git@github.com:banana-tong/test.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
07.刷新界面即可以发现推送上去的README.md文件
08.此时可创建新文件→命令行git pull拉取进行测试
至此,GitHub的安装使用完成
第5章 有关Git常用命令
add #添加文件内容至索引
branch #列出、创建或删除分支
checkout #检出一个分支或路径到工作区
clone #克隆一个版本库到一个新目录
commit #记录变更到版本库
init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库
log #显示提交日志
merge #合并两个或更多开发历史
mv #移动或重命名一个文件、目录或符号链接
pull #获取并合并另外的版本库或一个本地分支
push #更新远程引用和相关的对象
rm #从工作区和索引中删除文件
show #显示各种类型的对象
status #显示工作区状态
tag #创建、列出、删除或校验一个GPG签名的 tag 对象
下节想跟大家一同探讨一下有关代码上线问题,如有不妥望海涵
此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/
此处感谢神奇海螺为本文章提供的声明
GitLab版本管理工具的更多相关文章
- 可视化Git版本管理工具SourceTree的使用
最近去了新公司,发现公司使用的团队版本管理工具是SourceTree,本人一直是SVN的热衷粉,很少使用git,所以从头学习git及可视化客户端SourceTree的使用,本贴只针对新手,大牛可以无视 ...
- 版本管理工具Git(一)简要介绍
版本管理工具不但可以备份而且还能记录版本,也就是同一个东西不同时期的状态同时可以跟踪追溯.版本管理工具由CVS.SVN.Git.GitHub. 最早的版本管理工具CVS,因为多人开发项目导致工作很难协 ...
- GIT版本管理工具教程
目录 GIT版本管理工具教程 一 Git初始化 二 简单指令使用 基本操作 简单总结 三 Git进阶 Git三大区域 Git回滚 Git分支 Git工作流 四 Github代码管理仓库 第一步:注册G ...
- 安装Go语言支持及Gogs版本管理工具
安装Go语言支持及Gogs版本管理工具 1. GO 语言: 1.1 介绍 1.1.1 官方介绍: The Go programming language is an open source proje ...
- linux系统下使用流行的版本管理工具 Git
前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...
- GIT版本管理工具
原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- Studio之版本管理工具Git (图文教程)
目前业界主流的版本管理工具主要是 svn/git.svn是1种集中式的代码管理工具,而git是1种散布式的代码管理工具,广受极客的爱好.而基于git的github更是全宇宙码农的提高逼格,深究技术的必 ...
- 版本管理工具介绍—Git篇
前篇 如题,提起版本管理工具相信做C#开发 还是对Git比较陌生 我们可能更熟悉vss.svn 记录此文的目的 更是为以后的前段学习做基础 现在的技术比如nodeJs angularJs ==都 ...
- nodejs版本管理工具NVM(Node Version Mene)
最近打算用心学习nodejs,所以在学习中了解到NVM-nodejs的版本管理工具,下面我就记录下我学习并且安装的详细过程,请大神们放过~~第一步.你要先把你本机上安装的nodejs以及npm相关的东 ...
随机推荐
- Composer笔记
安装 windows中安装Composer 一般来说,windows下安装composer有两种办法,一种是直接下载并运行Composer-Setup.exe,这种方法在中国似乎很难完成安装.另一种就 ...
- IDEA安装步骤详解
IDEA开发工具是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具(git.svn.github ...
- Lucene入门-安装和运行Demo程序
Lucene版本:7.1 一.下载安装包 https://lucene.apache.org/core/downloads.html 二.安装 把4个必备jar包和路径添加到CLASSPATH \lu ...
- kafka原理和实践(一)原理:10分钟入门
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- String的Intern方法
jdk6 和 jdk7 下 intern 的区别 相信很多 JAVA 程序员都做做类似 String s = new String("abc")这个语句创建了几个对象的题目. 这种 ...
- 14. 监视ZooKeeper实例
ZooKeeper服务可以通过以下两种方式进行监控: 使用一组四个字母的单词命令来监视健康状态 使用ZooKeeper内置的Java管理扩展功能 四个字母的单词命令 ZooKeeper响应一组命令,每 ...
- Python初识--基础
碎碎念 最初想写一些机器学习算法的实现类的文章,但发现自己工作经验不足,即使写出来,也只是一些应用场景十分狭隘的小实验: 了解到身边有些朋友和同学也想了解学习一下脚本语言Python(毕竟是后起之秀) ...
- Mybatis框架解析之Builder解析
首先我们从builder这个类入手,首先我们注意到BaseBuilder,其实它的本质上市一个抽象类,它从本质上抽象出了Builder的一切,我猜想这里一定使用了建造者模式,但是这个抽象类里面居然没有 ...
- Vue 浅谈前端js框架vue
Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...
- 两行 CSS 代码实现 PNG 任意颜色赋色技术
很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现. 本方法与上面 ZXX 的方法及流传的使用 f ...