温馨提示:
-
看懂本文可能需要 -
简单使用过 Linux 系统 -
简单使用过 vim 编辑器 -
懂中文 :) -
您的观看和点赞是对本公众号最大力的支持和鼓励~~
以下内容请配合 视频观看 https://b23.tv/VLiAwx
目录
(目录较长,并且没有找到较好的方法代替。。。。)
1. 版本控制工具应该具备的功能
-
协同修改
-
多人并行不悖的修改服务器端的同一个文件。 -
数据备份
-
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态 -
版本管理
-
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。 -
权限控制
-
对团队中参与开发的人员进行权限控制 -
对团队外开发者贡献的代码进行审核——Git 独有。 -
历史记录
-
查看修改人、修改时间、修改内容、日志信息 -
将本地文件恢复到某一个历史状态。 -
分支管理
-
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
2. 版本控制简介
版本控制
工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以 使用版本控制思想管理代码的版本迭代
版本控制工具
版本控制是一种思想
具体的实现就是版本控制工具
版本控制工具主要有两种:集中式版本控制工具,分布式版本控制工具
集中式版本控制工具
CVS、SVN、VSS……
缺点:有单点故障的问题,服务器挂,全挂
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
特点:每台电脑都有所有已经提交的历史
3. Git 简介
Git 简史
官网:https://git-scm.com/
logo:
Git 安装
由于之前写过 git安装文章,在公众号后台回复教程即可获得所有教程文章,git安装步骤也在其中,由于链接经常发生变化,所以这里就不贴上了
Git 结构
Git 和代码托管中心
代码托管中心的任务:维护远程库
-
局域网环境下 -
GitLab 服务器 -
外网环境下 -
GitHub -
码云
本地库和远程库
团队内部协作
这两个人属于同一个团队,有相关的权限
跨团队协作
第三个人是团队以外,先 fork 一份到自己的远程,然后修改完之后 push 到自己的远程,如果需要合并,则发起一个pull请求,经过审核之后可以合并分支,然后团队内部的人就可以pull下来了
4. Git 命令行操作
本地库初始化
git init
这是隐藏目录,里面有一些文件,查看一下
config是一些配置信息文件
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要乱修改。
设置签名
形式
用户名:tom
Email 地址:goodMorning@xxxx.com
这两个没有要求,地址不存在也可以,作用是git为了区分不同开发人员的身份,但是要注意,登录远程的用户名和密码和这个没有任何关系
命令
项目级别/仓库级别:仅在当前本地库范围内有效
-
git config user.name wu_pro -
git config user.email goodmorning_pro@xxx.com -
信息保存位置:./.git/config 文件 -
image-20210107152402628
系统用户级别:登录当前操作系统的用户范围
-
git config –global user.name wu_glb -
git config –global goodmorning_pro@xxx.com -
信息保存位置:~/.gitconfig 文件 -
这个就不演示了,在用户目录,内容一样,Linux系统不解释,但是在Windows系统中,用户目录如图
_pro
,_glb
加后缀是为了区分不同级别的用户而已
级别优先级
-
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名 -
如果只有系统用户级别的签名,就以系统用户级别的签名为准 -
二者都没有不允许
基本操作
状态查看
git status
目前我的目录为空,所以使用这个命令会提示这样的信息
On branch master
表示我们当前在master
这个分支上
No commits yet
现在还没有提交过任何东西,表示我们现在本地库还没有什么东西
nothing to commit (create/copy files and use "git add" to track)
也没有什么可提交的(创建或者拷贝一个文件并且使用 git add
去追踪这个文件),表示暂存区还没有东西
好,那我们就创建一个文件,用vim编辑器创建一个文件,然后再次使用这个命令查看结果
Untracked files: (use "git add <file>..." to include in what will be committed) a.txt
可以看到有一个红色信息显示,提示说发现了未追踪的文件,可以使用 git add <file>...
命令,把他包含到将要被提交的地方,意思就是使用这个命令把这个文件加到暂存区
nothing added to commit but untracked files present (use "git add" to track)
说你还没有往要提交的地方放任何东西,但是未追踪的文件存在,后面还是这个提示命令
添加
git add <file>...
我们按照提示来,就使用这个提示命令,执行一下查看结果
warning: LF will be replaced by CRLF in a.txt.
:表示使用LF
结束符号将会替换a.txt
文件的CRLF
,这个其实在安装过程中就已经看到过了,就是文件结尾符号,因为Linux系统和Windows系统的文件结尾符号是不一致的,所以相当于修改了我们文件中的内容,因此给出一个警告信息
The file will have its original line endings in your working directory
:在你的工作目录中,这个文件还是保留了原始的行末,就是刚刚的换行符
这两个其实没有什么影响
然后我们再用git status
查看一下状态
发现我们刚刚的红颜色变成了柔和一点的绿色
Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: a.txt
要被提交的改变,如果想要撤销这个文件,可以使用 git rm --cached <file>...
命令
撤销添加
我们再按照他的提示执行这个命令,然后再用git status
查看一下状态
可以看到又恢复成原来的状态,再查看一下当前的工作区文件,文件还在,说明移除只是移除暂存区的文件,不影响工作区
提交
git commit [参数] <file>...
第一次提交
然后我们重新把这个文件add
到暂存区,然后我们提交一下这个文件,使用git commit
提交一下
这个命令执行的过程中会跳转到一个 vim 编辑器,里面会提示一些信息,提示说需要输入本次提交的消息,一般写本次提交的目的,主要解决什么样的问题等等等等的信息,写完之后退出
[master (root-commit) 41de63d] first commit
:
-
master
表示提交的是master分支 -
(root-commit)
表示这次是根提交,因为是第一次提交 -
41de63d
表示是这次的版本号 -
first commit
:就是刚刚在vim中编写的信息
1 file changed, 2 insertions(+)
:表示有一个文件改变,两行增加了
create mode 100644 a.txt
:创建模式的这样一个文件,100644分别表示文件类型和权限
然后我们再用git status
查看一下状态
nothing to commit, working tree clean
:没有什么要提交,工作树是干净的
修改文件后提交
接下来我们修改一下原本文件的内容,然后使用 git status
查看一下状态
这时候发现检测到文件被修改了
Changes not staged for commit:
:你有一个没有暂存的修改
(use "git add <file>..." to update what will be committed)
:你可以使用git add <file>...
命令去**更新(刚刚添加的时候提示 include,加入)**暂存区
(use "git restore <file>..." to discard changes in working directory)
:可以使用这个命令在你的工作目录里面取消这次修改,这个下面再说
(use "git add" and/or "git commit -a")
:你可以先使用 add 加入暂存区,或者直接 commit 提交(第一次只能先用 add),注意:直接提交的话就不能撤销了
然后我们重新加入,查看状态,并且提交,但是呢这次我不想进入 vim 所以我们可以给提交命令带一个参数 -m
带参数提交
命令:git commit -m “需要发送的消息” <file>...
提示信息基本一致,由于第二次提交,所以没有根提交的显示,并且版本号也发生了变化
版本穿梭
查看历史记录
git log
在看版本的前进和后退之前,要对版本的历史记录有一个直观的感受,我们使用一下 git log
commit 3bec3b2808289bd288ac945ad94e3e567649962b (HEAD -> master)
:
-
commit
表示一次提交 -
3bec3b2808289bd288ac945ad94e3e567649962b
:这一串东西是哈希值,代表索引,通过这个索引可以找到本次提交的信息 -
(HEAD -> master)
:HEAD
是一个指针,指向当前版本,前进后退的时候就是移动这个指针
Author: wu_pro <goodmorning_pro@xxx.com>
:很明显,作者<emali>
Date: Thu Jan 7 18:05:45 2021 +0800
:很明显,提交的时间
second commit
:很明显,这次提交的信息
为了更直观一些,我们多提交几次,方便前进和后退
加多一次之后执行 git log
会发现消息相当的多,不方便看,所以我们可以用一个简洁显示参数
简洁形式查看
git log --pretty=o neline
显示了哈希,指针,提交信息
但是呢,这个命令有点长,还可以简化一些
多屏显示控制方式:空格向下翻页 b 向上翻页 q 退出
git log --oneline
显示了部分哈希,指针,提交信息
其他显示命令
git reflog
这个命令多了其他信息,特别是中间一个奇怪的符号
HEAD@{0}, HEAD@{1}...
:表示HEAD
移动到所在版本需要几步,那个数字就是步数,HEAD@{1}
意思是移动到那个版本需要一步,其他类似
前进后退
本质就是操作那个 HEAD 指针
基于索引值操作[推荐]
-
git reset –hard [局部索引值] -
git reset –hard ae3f23b
使用^符号
-
只能后退 -
git reset –hard HEAD^ -
注:一个^表示后退一步,n 个表示后退 n 步
使用~符号
-
只能后退 -
由于版本太多,^ 的数量过多,所以就有了这个符号 -
git reset –hard HEAD~n -
注:表示后退 n 步
这时候执行git log [参数]
会发现,他只能显示当前版本以前的信息,和其他的显示不太一样
而且我们刚刚的版本跳转的每一个操作,都被记录了下来,可以用 git reflog
查看
reset 命令的三个参数对比
假设三个分区的版本都是对应的
–soft 参数
-
仅仅在本地库移动 HEAD 指针
如果是回退,就相当于 本地库 往后走了一步,换个角度就是工作区和暂存区往前走了,而对应的 git status
的状态就会变成绿色追踪状态
–mixed 参数
-
在本地库移动 HEAD 指针 -
重置暂存区
同样的假设是回退,本地库和暂存区往后走了一步,换个角度就是工作区往前走了,而对应的git status
的状态就变成了红色未追踪状态
–hard 参数
-
在本地库移动 HEAD 指针 -
重置暂存区 -
重置工作区
这个是三个地方同时移动,所以git status
没变化
删除文件并找回
永久删除后找回
现在创建一个文件,往里面写内容,添加到缓存区,然后提交到本地库
然后我们假设手误,不小心把文件删除,然后我们status
查看一下,顺便同步缓存区并提交
现在本地库已经有对应的操作信息
注意:操作是不可磨灭的,会在本地库永久存在
现在我们利用 reset
指令找回文件
添加到暂存区的删除文件找回
同样的,创建一文件,追踪并提交
然后删除,追踪,但是不提交
这时候可以利用远程库的指针同步一下,恢复到未删除的状态
HEAD就是本地最后版本,因为本地未提交
前提:删除前,文件存在时的状态提交到了本地库。
操作:git reset –hard [指针位置]
-
删除操作已经提交到本地库:指针位置指向历史记录 -
删除操作尚未提交到本地库:指针位置使用 HEAD
简单来说,就是利用本地库的指针回退版本,以达到文件恢复的目的
比较文件差异
git diff [文件名]
现在我们编辑一个文件,修改一行内容,然后使用git diff
命令对比一下
可以看到提示的内容,一行被删除,一行被增加,这是因为 git
是以行来进行管理的,然后我们把修改的文件加入到暂存区,再次使用 git diff
分析一下
并没有任何内容输出,说明这个命令默认是将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]
如果我们需要对比一下某个版本的文件,我们可以加上 本地库中历史版本哈希
那么这个命令会自动将工作区中的文件和本地库历史记录比较
如果不带文件名,会比较多个文件
分支管理
什么是分支
在版本控制过程中,使用多条线同时推进多个任务
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响。失败的分支删除重新开始即可
有些代码在运行的时候是不能暂停的,所以我们需要分出一个新的分支进行热修改,然后再合并回去
分支操作
git branch -v
现在我们清空一下缓存区,然后使用git branch -v
查看一下分支情况
可以看到列出了当前所选择分支master
,以及对应的版本信息,提交信息,注意,我们上方括号内的master
表示当前是master
分支,对应着下面绿色带*
那行
git branck hot_fix
接下来我们创建一个热修复分支hot_fix
,然后我们再查看一下分支情况
看到我们现在已经创建了两个分支,由于新分支是在旧分支的基础上出来的,所以新分支的初始版本和旧分支的最后版本一致
git checkout hot_fix
然后我们切换到新创建的分支,然后我们再查看一下分支情况
可以看到新分支变成绿色,上面括号内的东西也响应变化
接下来我们随便修改一个文件并提交,再次查看分支情况
可以看到,新分支的版本发生了变化,其实就是新分支往前推进了一步
git merge hot_fix
假设新分支的 bug 已经修复完毕,需要进行代码的合并,这时候请注意,需要把分支切换到需要合并的分支上,比如我现在需要将 hot_fix
合并到 master
上,所以需要将分支切换到 master
然后我们执行一下分支合并,然后查看一下热修复中修改的文件内容
文件已经被修改了,再看他们版本
发现又一致了
解决冲突
在进行上面操作的时候,有可能两个分支修改的是同一个文件的同一个地方,那么在合并的时候就会有冲突问题,接下来我们来演示一下
同样,两个分支修改同一个文件的同一个地方,并且分别提交
可以看到,两个版本都各自往前推进了一步,然后同样的切换到master
分支进行合并操作
可以看到出现了一些提示信息
CONFLICT (content): Merge conflict in dddd.txt
:内容冲突,dddd.txt文件合并冲突
Automatic merge failed; fix conflicts and then commit the result.
:自动合并失败,需要手动合并,然后提交结果
(master|MERGING)
:对应的也会有一个标识变化,表示当前处于master
分支的冲突处理环境中
这时候我们的文件区没有变化
因为在 SVN 中如果产生了冲突,会生成额外的文件,接下来我们打开所提示的 dddd.txt 查看文件的内容
可以看到两个分支的内容都进行了呈现,这时候就需要我们手动选择保留的部分,修改到自己满意的部分,然后保存退出,我们查看一下当前的状态
You have unmerged paths.
:你有一个未合并的分支
(fix conflicts and run "git commit")
:修复冲突并且运行git commit
命令
(use "git merge --abort" to abort the merge)
:使用git merge --abort
终止合并
Unmerged paths:
:未解决的冲突分支
(use "git add <file>..." to mark resolution)
:使用git add <file>...
命令标识为已经解决的冲突
both modified: dddd.txt
no changes added to commit (use "git add" and/or "git commit -a")
使用 git add
或者git commit -a
追踪或添加
我们按照提示来,标识为已解决再提交
注意这次提交不要带文件名,不然会报错,直接 git commit [参数]
即可,之后master
修复状态转变为 master
正常状态
5. Git 基本原理
哈希
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下 几个共同点
-
不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定 -
哈希算法确定,输入数据确定,输出数据能够保证不变 -
哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 -
哈希算法不可逆 Git 底层采用的是 SHA-1 算法。哈希算法可以被用来验证文件。原理如下图所示
Git 就是靠这种机制来从根本上保证数据完整性的
Git 保存版本的机制
集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异
当有一个新文件修改的时候,只保存新增加的部分,如我现在想要得到 Version 3
的C文件,需要将 File C
、A1、A2三个合并才可以,对于没修过的,直接指向上一个文件即可
Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。
当有一个新文件修改的时候,保存所有部分,对于没修过的,直接指向上一个文件即可
Git 文件管理机制细节
Git 的“提交对象”
提交一次,会对于每个文件(黄色)都会进行一次哈希,然后整理成一个树保存到一个树对象中(蓝色),然后这个对象有所有的文件哈希信息和对应的文件名,这个树对象自己也有一个哈希,这个哈希会被保存到一个提交对象中(白色),提交对象中也有自己的哈希,树哈希、作者和此次提交的相关信息
这个提交哈希就是前面看到的 commit后面一串东西
提交对象及其父对象形成的链条
每次下一次提交的指针会指向上一次提交的对象
Git 分支管理机制
分支的创建
白色就是我们每次提交的记录,创建一个分支就是创建一个红色节点到当前的白色节点,屎黄色就是当前正在操作的节点,如这里我们正在master
节点上
分支的切换
切换分支,其实就是切换到其他的红色节点,比如现在我切换到了testing
分支
然后testing
分支提交了一些内容,对应的就会产生一个白色节点指向父节点
然后我们切换回master
分支提交内容,整个分支变化如下
6. GitHub
首先创建两个账号,过程自行百度,其中一个账号创建仓库,作为所有者,另一个账号作为团队中的一个人员
然后使用其中一个账号创建一个远程仓库,并拷贝地址
对应的创建两个目录user_1
和user_2
然后进入 user_1
,初始化仓库,配置前面,然后创建一个文件并提交
远程配置
git remote [参数]
我们使用git remote -v
查看一下远程的配置
由于我们并没有配置任何远程信息,所以这里为空,接下来我们配置一下
执行 git remote add origin [前面拷贝过来的远程地址]
,然后再执行一下命令。origin
是对url的一个别名,因为一个git库可能对应多个远程代码库(例如使用git remote add
命令添加其他远程代码库,git协同模型的子树合并),如果没有这个别名,每次都填写这个长长的url会很麻烦,所以这个别名是必须的,而且clone
的时候,别名默认为origin
(push)
:就是我们推送的远程仓库地址
(fetch)
:就是我们之后拉取远程仓库代码的地址,下面会说到
$git remote rename <old> <new> -----重命名别名
$git remote remove <name> ------移除某个远程代码库
$git remote -v show ------移除某个远程代码库
以上配置其实在 .git/config
里面有显示
推送远程
git push [远程地址别名] [分支名]
然后git push
命令使用把它推送到远程仓库,过程中会弹出让你登录的界面,登录即可,然后等待推送完毕
可以看到推送完成,并且创建了 master 分支
然后我们切换到第二个用户的文件夹user_2
,打开新的git命令行
克隆仓库
git clone [要克隆的远程仓库的地址]
然后使用 git clone
命令克隆仓库,然后看一下下载了什么玩意
发现有一个文件夹,这个文件夹其实就是仓库的名称,我们进入,再查看一下
可以看到里面有一些文件,其中包括.git
这个文件,说明了使用git clone
命令会顺便帮我们初始化当前的仓库,以及拉取下我们的仓库内部文件,既然有了.git
这个文件,我们看一下是否有一些相关配置
可以看到相关的配置也配好了,这时候我们修改文件,然后直接推送试试
可以看到这时候推送成功了,而且推送过程并没有提示要登录,这是因为我们Windows系统默认保存了相关网站对应的登录信息,我们在凭证管理器中可以找到
如果要以其他用户登录,那么需要将这个信息删除,重新执行那个命令,所以我们现在删除,然后再次修改文件,然后提交并推送,刚刚忘记提交了。。。。
可以看到我们使用 克隆命令是不会自动配置局部用户信息的,由于我这里没有配置全局用户信息,所以只能用局部信息,又因为局部没有,所以失败了,简单配置一下即可,然后重新推送
可以看到报了一个错误,是因为我们现在并不属于这个团队,所以并不能推送上去,要使得推送成功,需要将用户2加入到团队中,然后登录被邀请人登录账号和进入被邀请人的邮箱接受邀请
被邀请账号的邮箱点击对应的按钮
再次尝试推送
推送完成,查看远程仓库文件,发现被修改了
拉取
pull
命令是fetch
命令与merge
命令的合并操作
git fetch [远程库地址别名] [远程分支名]
进入user1
目录,然后查看一下原本的文件,然后执行拉取操作
由于这里有点失误,没有网速,因为我执行了两次拉取
然后我们看一下拉取之后的文件变化
发现并没有变化,这是因为他被弄到新的分支中了,需要我们手动进行合并,接下来我们进入远程拉取的分支
注意,这里使用
git branch -v
命令是看不到对应的分支的image-20210108231315629
执行git checkout origin/maste
命令进入远程下载的分支,然后同样查看一下user.txt
文件的内容
可以看到文件是我们远程仓库的文件,这里切换的时候有一些提示信息,看到我们可以直接创建新的分支
git merge [远程库地址别名/远程分支名]
然后我们切换回master
分支,然后使用merge
将远程分支进行合并
很明显文件发生了变化
然后我们修改一些内容,提交并推送(注意凭证问题),然后查看远程仓库
成功,远程就不截图了
git pull [远程库地址别名] [远程分支名]
然后我们换用户2,把内容拉取下来
可以看到自己的本地文件也发生了变化
解决冲突
同样的,有可能两个用户修改的都是同一个文件的同一个文件,那么在 GitHub 中如何解决冲突问题呢
同样的,两个用户都修改同一个位置的同一个地方,然后两个人都提交
可以看到,先推送的推送成功,但是后推送的人推送失败,这是因为git经过计算得到远程和本地的版本不一致,所以认为你并不知道远程库进行了更新,此时需要你先拉取下来远程库,然后再次推送
可以看到拉取下来之后我们进入了冲突情况,这时候需要解决冲突再次推送上去
可以看到成功了
跨团队协作
还记得前面的图嘛
准备工作:注册第三个账号,我们暂且称他为用户3,以用户3的身份登录GitHub
进入GitHub,进入对应的仓库,Fork一份
fork完成之后,就会在自己的仓库中显示
然后我们再把这个仓库克隆下来,注意克隆的地址是 fork 出来的仓库
假如我现在这个第三方是修改bug,所以我们编辑一下文件,然后提交,推送到远程
这时候用户3就修改了,由于用户3不属于团队成员,所以合并代码需要发起一个pull请求,然后等待团队负责人审核通过
然后就可以发起一个聊天信息
然后我们切换到审核人的账号查看信息
然后我们可以选择查看代码修改情况
确认无误之后,回到聊天界面,选择回复或合并代码,或者取消此次请求,同样的,合并需要填写此次修改的信息
如果回复,用户3可以在这里看到
合并之后,我们就可以拉取下来看了
SSH 登录
之前我们使用 https 方式,在Windows 10 中,在凭证管理器会帮助我们保存用户和密码,但是在之前的win7,xp中是没有的,所以每次都需要输入用户名密码,实在不方便,所以可以使用 ssh 方式推送
执行ssh-keygen.exe -t rsa -C GitHub的邮箱
,然后一直回车即可
他会在家目录中生成一个.ssh
文件,我们看一下有什么东西
我们需要拷贝下面这部分内容,然后打开 GitHub
然后把我们刚刚拷贝的内容弄进去,修改文件,然后提交试试(Windows 10系统记得删除一下凭证,以 ssh 方式提交)
由于我们使用的是 ssh 协议,由于原来是 http 协议,所以需要加上新的地址,进入GitHub,然后复制 ssh 链接
然后回到命令行,把这个地址加到配置中
开始推送
7. Git 工作流
概念
在项目开发过程中使用 Git 的方式
分类
集中式工作流
像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到 Master 这个分支上。这种方式与 SVN 的主要区别就是开发人员有本地库。Git 很多特性并没有用到。
GitFlow 工作流
Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布 迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构
下面有详解
Forking 工作流
Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的 功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受不信任贡献者的提交。
GitHub
GitFlow 工作流详解
分支种类
-
主干分支 master -
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境 完全一致。 -
开发分支 develop -
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码 -
bug 修理分支 hotfix -
主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修 理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。 -
准生产分支(预发布分支) release -
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集 成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后 可以视情况删除。 -
功能分支 feature -
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支 中独立出来。开发完成后会合并到开发分支。
8. Gitlab 服务器搭建过程
我们还可以搭建属于自己的私人GitHub
以下过程默认您已经了解并使用过Linux系统
环境 Centos 7
官网地址
首页:https://about.gitlab.com/
下载包地址 https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm/download.rpm
安装命令摘录
sudo rpm -ivh /opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
然后重启电脑
gitlab 服务操作
-
初始化配置 gitlab -
gitlab-ctl reconfigure -
启动 gitlab 服务 -
gitlab-ctl start -
停止 gitlab 服务 -
gitlab-ctl stop
上面代码复制粘贴就好了
启动之后
浏览器访问
访问 Linux 服务器 IP 地址即可
如果想访问 EXTERNAL_URL 指定的域名还需要配置 域名服务器或本地 hosts 文件。
初次登录时需要为 gitlab 的 root 用户设置密码
具体使用就和 GitHub 一样了
end
您的观看和点赞是对本公众号最大力的支持和鼓励~~
原文始发于微信公众号(一个调皮的bug):git 入门
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/43275.html