git 入门

温馨提示:

  • 看懂本文可能需要
    • 简单使用过 Linux 系统
    • 简单使用过 vim 编辑器
    • 懂中文 :)
  • 您的观看和点赞是对本公众号最大力的支持和鼓励~~

以下内容请配合 视频观看  https://b23.tv/VLiAwx

目录

(目录较长,并且没有找到较好的方法代替。。。。)

git 入门

1. 版本控制工具应该具备的功能

  • 协同修改

    • 多人并行不悖的修改服务器端的同一个文件。
  • 数据备份

    • 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态
  • 版本管理

    • 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。
  • 权限控制

    • 对团队中参与开发的人员进行权限控制
    • 对团队外开发者贡献的代码进行审核——Git 独有。
  • 历史记录

    • 查看修改人、修改时间、修改内容、日志信息
    • 将本地文件恢复到某一个历史状态。
  • 分支管理

    • 允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

2. 版本控制简介

版本控制

工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以 使用版本控制思想管理代码的版本迭代

版本控制工具

版本控制是一种思想

具体的实现就是版本控制工具

版本控制工具主要有两种:集中式版本控制工具,分布式版本控制工具

集中式版本控制工具

CVS、SVN、VSS……

git 入门
image-20210107141109969

缺点:有单点故障的问题,服务器挂,全挂

分布式版本控制工具

Git、Mercurial、Bazaar、Darcs……

git 入门
image-20210107141126751

特点:每台电脑都有所有已经提交的历史

3. Git 简介

Git 简史

git 入门
image-20210107141715608

官网:https://git-scm.com/

logo:git 入门

Git 安装

由于之前写过 git安装文章,在公众号后台回复教程即可获得所有教程文章,git安装步骤也在其中,由于链接经常发生变化,所以这里就不贴上了

Git 结构

git 入门
image-20210107144754245

Git 和代码托管中心

代码托管中心的任务:维护远程库

  • 局域网环境下
    • GitLab 服务器
  • 外网环境下
    • GitHub
    • 码云

本地库和远程库

团队内部协作

git 入门
image-20210107145558291

这两个人属于同一个团队,有相关的权限

跨团队协作

git 入门
image-20210107150127221

第三个人是团队以外,先 fork 一份到自己的远程,然后修改完之后 push 到自己的远程,如果需要合并,则发起一个pull请求,经过审核之后可以合并分支,然后团队内部的人就可以pull下来了

4. Git 命令行操作

本地库初始化

git init

git 入门
image-20210107150840500

这是隐藏目录,里面有一些文件,查看一下

git 入门
image-20210107150958707

config是一些配置信息文件

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要乱修改。

设置签名

形式

用户名:tom

Email 地址:goodMorning@xxxx.com

这两个没有要求,地址不存在也可以,作用是git为了区分不同开发人员的身份,但是要注意,登录远程的用户名和密码和这个没有任何关系

命令

项目级别/仓库级别:仅在当前本地库范围内有效

  • git config user.name wu_pro
  • git config user.email goodmorning_pro@xxx.com
  • 信息保存位置:./.git/config 文件
    • git 入门
      image-20210107152402628

系统用户级别:登录当前操作系统的用户范围

  • git config –global user.name wu_glb
  • git config –global goodmorning_pro@xxx.com
  • 信息保存位置:~/.gitconfig 文件
    • 这个就不演示了,在用户目录,内容一样,Linux系统不解释,但是在Windows系统中,用户目录如图git 入门

_pro_glb加后缀是为了区分不同级别的用户而已

级别优先级

  • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
  • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
  • 二者都没有不允许

基本操作

状态查看

git status

目前我的目录为空,所以使用这个命令会提示这样的信息

git 入门
image-20210107172229882

On branch master表示我们当前在master这个分支上

No commits yet现在还没有提交过任何东西,表示我们现在本地库还没有什么东西

nothing to commit (create/copy files and use "git add" to track)也没有什么可提交的(创建或者拷贝一个文件并且使用 git add去追踪这个文件),表示暂存区还没有东西

好,那我们就创建一个文件,用vim编辑器创建一个文件,然后再次使用这个命令查看结果

git 入门
image-20210107172405477

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>...

我们按照提示来,就使用这个提示命令,执行一下查看结果

git 入门
image-20210107173440082

warning: LF will be replaced by CRLF in a.txt.:表示使用LF结束符号将会替换a.txt文件的CRLF,这个其实在安装过程中就已经看到过了,就是文件结尾符号,因为Linux系统和Windows系统的文件结尾符号是不一致的,所以相当于修改了我们文件中的内容,因此给出一个警告信息

git 入门
image-20210107173647490

The file will have its original line endings in your working directory:在你的工作目录中,这个文件还是保留了原始的行末,就是刚刚的换行符

这两个其实没有什么影响

然后我们再用git status查看一下状态

git 入门
image-20210107173933529

发现我们刚刚的红颜色变成了柔和一点的绿色

Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: a.txt

要被提交的改变,如果想要撤销这个文件,可以使用 git rm --cached <file>...命令

撤销添加

我们再按照他的提示执行这个命令,然后再用git status查看一下状态

git 入门
image-20210107174524994

可以看到又恢复成原来的状态,再查看一下当前的工作区文件,文件还在,说明移除只是移除暂存区的文件,不影响工作区

提交

git commit [参数] <file>...

第一次提交

然后我们重新把这个文件add到暂存区,然后我们提交一下这个文件,使用git commit提交一下

git 入门
image-20210107174744794

这个命令执行的过程中会跳转到一个 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查看一下状态

git 入门
image-20210107175729096

nothing to commit, working tree clean:没有什么要提交,工作树是干净的

修改文件后提交

接下来我们修改一下原本文件的内容,然后使用 git status 查看一下状态

git 入门
image-20210107175949432

这时候发现检测到文件被修改了

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 入门
image-20210107180601652

提示信息基本一致,由于第二次提交,所以没有根提交的显示,并且版本号也发生了变化

版本穿梭

查看历史记录

git log

在看版本的前进和后退之前,要对版本的历史记录有一个直观的感受,我们使用一下 git log

git 入门
image-20210107181422218

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

git 入门
image-20210107183428311

显示了哈希,指针,提交信息

但是呢,这个命令有点长,还可以简化一些

多屏显示控制方式:空格向下翻页      b 向上翻页      q 退出

git log --oneline

git 入门
image-20210107183520681

显示了部分哈希,指针,提交信息

其他显示命令

git reflog

git 入门
image-20210107183643987

这个命令多了其他信息,特别是中间一个奇怪的符号

HEAD@{0}, HEAD@{1}...:表示HEAD移动到所在版本需要几步,那个数字就是步数,HEAD@{1}意思是移动到那个版本需要一步,其他类似

前进后退

本质就是操作那个 HEAD 指针

基于索引值操作[推荐]
  • git reset –hard [局部索引值]
  • git reset –hard ae3f23b
git 入门
image-20210107192742833
使用^符号
  • 只能后退
  • git reset –hard HEAD^
  • 注:一个^表示后退一步,n 个表示后退 n 步
git 入门
image-20210111223311333
使用~符号
  • 只能后退
  • 由于版本太多,^ 的数量过多,所以就有了这个符号
  • git reset –hard HEAD~n
  • 注:表示后退 n 步
git 入门
image-20210107192958381

这时候执行git log [参数]会发现,他只能显示当前版本以前的信息,和其他的显示不太一样

git 入门
image-20210107193400738

而且我们刚刚的版本跳转的每一个操作,都被记录了下来,可以用 git reflog查看

git 入门
image-20210111223437638

reset 命令的三个参数对比

假设三个分区的版本都是对应的

git 入门
image-20210107213607035
–soft 参数
  • 仅仅在本地库移动 HEAD 指针
git 入门
image-20210107213640481

如果是回退,就相当于 本地库 往后走了一步,换个角度就是工作区和暂存区往前走了,而对应的 git status的状态就会变成绿色追踪状态

git 入门
image-20210107215019032
–mixed 参数
  • 在本地库移动 HEAD 指针
  • 重置暂存区
git 入门
image-20210107213814108

同样的假设是回退,本地库和暂存区往后走了一步,换个角度就是工作区往前走了,而对应的git status的状态就变成了红色未追踪状态

git 入门
image-20210107215133217
–hard 参数
  • 在本地库移动 HEAD 指针
  • 重置暂存区
  • 重置工作区
git 入门
image-20210107214001269

这个是三个地方同时移动,所以git status没变化

git 入门
image-20210107215246943

删除文件并找回

永久删除后找回

现在创建一个文件,往里面写内容,添加到缓存区,然后提交到本地库

git 入门
image-20210107230300368

然后我们假设手误,不小心把文件删除,然后我们status查看一下,顺便同步缓存区并提交

git 入门
image-20210107231004793

现在本地库已经有对应的操作信息

注意:操作是不可磨灭的,会在本地库永久存在

现在我们利用 reset指令找回文件

git 入门
image-20210107232008911
添加到暂存区的删除文件找回

同样的,创建一文件,追踪并提交

git 入门
image-20210107232343517

然后删除,追踪,但是不提交

git 入门
image-20210107232451099

这时候可以利用远程库的指针同步一下,恢复到未删除的状态

git 入门
image-20210107232740199

HEAD就是本地最后版本,因为本地未提交

前提:删除前,文件存在时的状态提交到了本地库。

操作:git reset –hard [指针位置]

  • 删除操作已经提交到本地库:指针位置指向历史记录
  • 删除操作尚未提交到本地库:指针位置使用 HEAD

简单来说,就是利用本地库的指针回退版本,以达到文件恢复的目的

比较文件差异

git diff [文件名]

现在我们编辑一个文件,修改一行内容,然后使用git diff命令对比一下

git 入门
image-20210108001034328

可以看到提示的内容,一行被删除,一行被增加,这是因为 git 是以行来进行管理的,然后我们把修改的文件加入到暂存区,再次使用 git diff分析一下

git 入门
image-20210108001156458

并没有任何内容输出,说明这个命令默认是将工作区中的文件和暂存区进行比较

git diff [本地库中历史版本] [文件名]

如果我们需要对比一下某个版本的文件,我们可以加上 本地库中历史版本哈希

git 入门
image-20210108001346760
git 入门
image-20210108001445348

那么这个命令会自动将工作区中的文件和本地库历史记录比较

如果不带文件名,会比较多个文件

git 入门
image-20210108002745401

分支管理

什么是分支

在版本控制过程中,使用多条线同时推进多个任务

git 入门
image-20210108003531110

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响。失败的分支删除重新开始即可

有些代码在运行的时候是不能暂停的,所以我们需要分出一个新的分支进行热修改,然后再合并回去

分支操作

git branch -v

现在我们清空一下缓存区,然后使用git branch -v查看一下分支情况

git 入门
image-20210108114519656

可以看到列出了当前所选择分支master,以及对应的版本信息,提交信息,注意,我们上方括号内的master表示当前是master分支,对应着下面绿色带*那行

git branck hot_fix

接下来我们创建一个热修复分支hot_fix,然后我们再查看一下分支情况

git 入门
image-20210108115157828

看到我们现在已经创建了两个分支,由于新分支是在旧分支的基础上出来的,所以新分支的初始版本和旧分支的最后版本一致

git checkout hot_fix

然后我们切换到新创建的分支,然后我们再查看一下分支情况

git 入门
image-20210108122514618

可以看到新分支变成绿色,上面括号内的东西也响应变化

接下来我们随便修改一个文件并提交,再次查看分支情况

git 入门
image-20210108122807130

可以看到,新分支的版本发生了变化,其实就是新分支往前推进了一步

git merge hot_fix

假设新分支的 bug 已经修复完毕,需要进行代码的合并,这时候请注意,需要把分支切换到需要合并的分支上,比如我现在需要将 hot_fix 合并到 master上,所以需要将分支切换到 master

git 入门
image-20210108124048769

然后我们执行一下分支合并,然后查看一下热修复中修改的文件内容

git 入门
image-20210108124137542

文件已经被修改了,再看他们版本

git 入门
image-20210108125102171

发现又一致了

解决冲突

在进行上面操作的时候,有可能两个分支修改的是同一个文件的同一个地方,那么在合并的时候就会有冲突问题,接下来我们来演示一下

同样,两个分支修改同一个文件的同一个地方,并且分别提交

git 入门
image-20210108131327045

可以看到,两个版本都各自往前推进了一步,然后同样的切换到master分支进行合并操作

git 入门
image-20210108143534967

可以看到出现了一些提示信息

CONFLICT (content): Merge conflict in dddd.txt:内容冲突,dddd.txt文件合并冲突

Automatic merge failed; fix conflicts and then commit the result.:自动合并失败,需要手动合并,然后提交结果

(master|MERGING):对应的也会有一个标识变化,表示当前处于master分支的冲突处理环境中

这时候我们的文件区没有变化

git 入门
image-20210108144040489

因为在 SVN 中如果产生了冲突,会生成额外的文件,接下来我们打开所提示的 dddd.txt 查看文件的内容

git 入门
image-20210108144305152

可以看到两个分支的内容都进行了呈现,这时候就需要我们手动选择保留的部分,修改到自己满意的部分,然后保存退出,我们查看一下当前的状态

git 入门
image-20210108144455426

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 入门
image-20210108145226075

注意这次提交不要带文件名,不然会报错,直接 git commit [参数]即可,之后master修复状态转变为 master正常状态

5. Git 基本原理

哈希

git 入门
image-20210108151409863

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下 几个共同点

  • 不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定
  • 哈希算法确定,输入数据确定,输出数据能够保证不变
  • 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
  • 哈希算法不可逆 Git 底层采用的是 SHA-1 算法。哈希算法可以被用来验证文件。原理如下图所示
git 入门
image-20210108151458519

Git 就是靠这种机制来从根本上保证数据完整性的

Git 保存版本的机制

集中式版本控制工具的文件管理机制

以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异

git 入门
image-20210108153506734

当有一个新文件修改的时候,只保存新增加的部分,如我现在想要得到 Version 3的C文件,需要将 File C、A1、A2三个合并才可以,对于没修过的,直接指向上一个文件即可

Git 的文件管理机制

Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。

git 入门
image-20210108153832443

当有一个新文件修改的时候,保存所有部分,对于没修过的,直接指向上一个文件即可

Git 文件管理机制细节

Git 的“提交对象”

git 入门
image-20210108154448770

提交一次,会对于每个文件(黄色)都会进行一次哈希,然后整理成一个树保存到一个树对象中(蓝色),然后这个对象有所有的文件哈希信息和对应的文件名,这个树对象自己也有一个哈希,这个哈希会被保存到一个提交对象中(白色),提交对象中也有自己的哈希,树哈希、作者和此次提交的相关信息

git 入门
image-20210108154849517

这个提交哈希就是前面看到的 commit后面一串东西

提交对象及其父对象形成的链条

git 入门
image-20210108154501846

每次下一次提交的指针会指向上一次提交的对象

Git 分支管理机制

分支的创建

git 入门
image-20210108161604357

白色就是我们每次提交的记录,创建一个分支就是创建一个红色节点到当前的白色节点,屎黄色就是当前正在操作的节点,如这里我们正在master节点上

分支的切换

git 入门
image-20210108162500267

切换分支,其实就是切换到其他的红色节点,比如现在我切换到了testing分支

git 入门
image-20210108162548792

然后testing分支提交了一些内容,对应的就会产生一个白色节点指向父节点

然后我们切换回master分支提交内容,整个分支变化如下

git 入门
image-20210108162730048
git 入门
image-20210108162750573

6. GitHub

首先创建两个账号,过程自行百度,其中一个账号创建仓库,作为所有者,另一个账号作为团队中的一个人员

然后使用其中一个账号创建一个远程仓库,并拷贝地址

git 入门
image-20210108213546632

对应的创建两个目录user_1user_2

git 入门
image-20210111223550733

然后进入 user_1,初始化仓库,配置前面,然后创建一个文件并提交

远程配置

git remote [参数]

我们使用git remote -v查看一下远程的配置

git 入门
image-20210108213646515

由于我们并没有配置任何远程信息,所以这里为空,接下来我们配置一下

执行 git remote add origin [前面拷贝过来的远程地址],然后再执行一下命令。origin是对url的一个别名,因为一个git库可能对应多个远程代码库(例如使用git remote add命令添加其他远程代码库,git协同模型的子树合并),如果没有这个别名,每次都填写这个长长的url会很麻烦,所以这个别名是必须的,而且clone的时候,别名默认为origin

git 入门
image-20210108214022632

(push):就是我们推送的远程仓库地址

(fetch):就是我们之后拉取远程仓库代码的地址,下面会说到

$git remote rename <old> <new>   -----重命名别名
$git remote remove <name> ------移除某个远程代码库
$git remote -v show ------移除某个远程代码库

以上配置其实在 .git/config里面有显示

git 入门
image-20210108222253775

推送远程

git push [远程地址别名] [分支名]

然后git push命令使用把它推送到远程仓库,过程中会弹出让你登录的界面,登录即可,然后等待推送完毕

git 入门
image-20210108215953796
git 入门
image-20210108220056475

可以看到推送完成,并且创建了 master 分支

然后我们切换到第二个用户的文件夹user_2,打开新的git命令行

克隆仓库

git clone [要克隆的远程仓库的地址]

然后使用 git clone 命令克隆仓库,然后看一下下载了什么玩意

git 入门
image-20210108220711209

发现有一个文件夹,这个文件夹其实就是仓库的名称,我们进入,再查看一下

git 入门
image-20210108220845886

可以看到里面有一些文件,其中包括.git这个文件,说明了使用git clone命令会顺便帮我们初始化当前的仓库,以及拉取下我们的仓库内部文件,既然有了.git这个文件,我们看一下是否有一些相关配置

git 入门
image-20210108223343672

可以看到相关的配置也配好了,这时候我们修改文件,然后直接推送试试

git 入门
image-20210108223524889

可以看到这时候推送成功了,而且推送过程并没有提示要登录,这是因为我们Windows系统默认保存了相关网站对应的登录信息,我们在凭证管理器中可以找到

git 入门
image-20210108223758394

如果要以其他用户登录,那么需要将这个信息删除,重新执行那个命令,所以我们现在删除,然后再次修改文件,然后提交并推送,刚刚忘记提交了。。。。

git 入门
image-20210108224046233

可以看到我们使用 克隆命令是不会自动配置局部用户信息的,由于我这里没有配置全局用户信息,所以只能用局部信息,又因为局部没有,所以失败了,简单配置一下即可,然后重新推送

git 入门
image-20210108225312418

可以看到报了一个错误,是因为我们现在并不属于这个团队,所以并不能推送上去,要使得推送成功,需要将用户2加入到团队中,然后登录被邀请人登录账号和进入被邀请人的邮箱接受邀请

git 入门
image-20210108225609798

被邀请账号的邮箱点击对应的按钮

git 入门
image-20210108230148550

再次尝试推送

git 入门
image-20210108230056205

推送完成,查看远程仓库文件,发现被修改了

拉取

pull命令是fetch命令与merge命令的合并操作

git fetch [远程库地址别名] [远程分支名]

进入user1目录,然后查看一下原本的文件,然后执行拉取操作

git 入门
image-20210108231007027

由于这里有点失误,没有网速,因为我执行了两次拉取

然后我们看一下拉取之后的文件变化

git 入门
image-20210108231150898

发现并没有变化,这是因为他被弄到新的分支中了,需要我们手动进行合并,接下来我们进入远程拉取的分支

注意,这里使用git branch -v命令是看不到对应的分支的

git 入门
image-20210108231315629

执行git checkout origin/maste命令进入远程下载的分支,然后同样查看一下user.txt文件的内容

git 入门
image-20210108231500148

可以看到文件是我们远程仓库的文件,这里切换的时候有一些提示信息,看到我们可以直接创建新的分支

git merge [远程库地址别名/远程分支名]

然后我们切换回master分支,然后使用merge将远程分支进行合并

git 入门
image-20210108231805925

很明显文件发生了变化

然后我们修改一些内容,提交并推送(注意凭证问题),然后查看远程仓库

git 入门
image-20210108232208008

成功,远程就不截图了

git pull [远程库地址别名] [远程分支名]

然后我们换用户2,把内容拉取下来

git 入门
image-20210108232509471

可以看到自己的本地文件也发生了变化

解决冲突

同样的,有可能两个用户修改的都是同一个文件的同一个文件,那么在 GitHub 中如何解决冲突问题呢

同样的,两个用户都修改同一个位置的同一个地方,然后两个人都提交

git 入门
image-20210109234955508

可以看到,先推送的推送成功,但是后推送的人推送失败,这是因为git经过计算得到远程和本地的版本不一致,所以认为你并不知道远程库进行了更新,此时需要你先拉取下来远程库,然后再次推送

git 入门
image-20210109235241157
git 入门
image-20210109235322619

可以看到拉取下来之后我们进入了冲突情况,这时候需要解决冲突再次推送上去

git 入门
image-20210109235455360

可以看到成功了

跨团队协作

还记得前面的图嘛

git 入门
image-20210110011318641

准备工作:注册第三个账号,我们暂且称他为用户3,以用户3的身份登录GitHub

进入GitHub,进入对应的仓库,Fork一份

git 入门
image-20210110004001219

fork完成之后,就会在自己的仓库中显示

git 入门
image-20210110010033094

然后我们再把这个仓库克隆下来,注意克隆的地址是 fork 出来的仓库

git 入门
image-20210110010254706

假如我现在这个第三方是修改bug,所以我们编辑一下文件,然后提交,推送到远程

git 入门
image-20210110011157249

这时候用户3就修改了,由于用户3不属于团队成员,所以合并代码需要发起一个pull请求,然后等待团队负责人审核通过

git 入门
image-20210110011534118

git 入门

然后就可以发起一个聊天信息

git 入门
image-20210110011712706

然后我们切换到审核人的账号查看信息

git 入门
image-20210110012644379

然后我们可以选择查看代码修改情况

git 入门
image-20210110012957541

确认无误之后,回到聊天界面,选择回复或合并代码,或者取消此次请求,同样的,合并需要填写此次修改的信息

git 入门
image-20210110013137266

如果回复,用户3可以在这里看到

git 入门
image-20210110013255681

合并之后,我们就可以拉取下来看了

git 入门
image-20210110013636214

SSH 登录

之前我们使用 https 方式,在Windows 10 中,在凭证管理器会帮助我们保存用户和密码,但是在之前的win7,xp中是没有的,所以每次都需要输入用户名密码,实在不方便,所以可以使用 ssh 方式推送

执行ssh-keygen.exe -t rsa -C GitHub的邮箱,然后一直回车即可

git 入门
image-20210110223046586

他会在家目录中生成一个.ssh文件,我们看一下有什么东西

git 入门
image-20210110223857337

我们需要拷贝下面这部分内容,然后打开 GitHub

git 入门
image-20210110224953003
git 入门
image-20210110224610914

然后把我们刚刚拷贝的内容弄进去,修改文件,然后提交试试(Windows 10系统记得删除一下凭证,以 ssh 方式提交)

由于我们使用的是 ssh 协议,由于原来是 http 协议,所以需要加上新的地址,进入GitHub,然后复制 ssh 链接

git 入门
image-20210110225748860

然后回到命令行,把这个地址加到配置中

git 入门
image-20210110230124079

开始推送

git 入门
image-20210110230237127

7. Git 工作流

概念

在项目开发过程中使用 Git 的方式

分类

集中式工作流

像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到 Master 这个分支上。这种方式与 SVN 的主要区别就是开发人员有本地库。Git 很多特性并没有用到。

git 入门
image-20210110233246437

GitFlow 工作流

Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布 迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构

下面有详解

git 入门
image-20210110232535773

Forking 工作流

Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的 功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受不信任贡献者的提交。

GitHub

GitFlow 工作流详解

分支种类

git 入门
image-20210110232258733
  • 主干分支 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

上面代码复制粘贴就好了

启动之后

git 入门
image-20210111005408271

浏览器访问

访问 Linux 服务器 IP 地址即可

git 入门
image-20210111005455625

如果想访问 EXTERNAL_URL 指定的域名还需要配置 域名服务器或本地 hosts 文件。

初次登录时需要为 gitlab 的 root 用户设置密码

git 入门
image-20210111121212584
git 入门
image-20210111121220475

具体使用就和 GitHub 一样了


end

您的观看和点赞是对本公众号最大力的支持和鼓励~~


原文始发于微信公众号(一个调皮的bug):git 入门

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/43275.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!