写在前面

本文仅做工作模型的描述与总结,概念性的东西不做介绍。

初始化1:创建远程仓库

1. 创建:在这里我使用Github进行托管,创建仓库地址:https://github.com/new

image-20200906103249004

2. 克隆:进入到创建好的仓库,如下图所示。

image-20200906103526013

在本地计算机找一个目录用于存放仓库,右击该目录,选择Git Bash Here

image-20200906103703935

在弹出来的页面输入git clone 远程仓库地址 ,如下图所示。

image-20200906114719

克隆完毕后,目录下会出现一个与远程仓库同名的目录,如下图所示。

image-20200906104856448

双击该目录,进入的目录称为工作区,同时目录下还伴随着一个隐藏文件夹.git,我们称之为版本库,所有版本信息都会存在这里,如下图所示。

image-20200906111232362

初始化2:创建本地仓库

1. 创建:使用mkdir 目录名新建一个目录作为被git管理的目录,如下图所示。

image-20200906113458327

创建结果如下图所示。

image-20200906113318049

2. 初始化:使用git init方法进行初始化,会产生一个.git隐藏目录,称为版本库

image-20200906113741588

模型1:单人工作模型

1. 新建一个文件

image-20200906105039102

2. 查看版本库情况:git status,下图绿色横线显示了新建到工作目录的文件,但是仅仅是新建而已,并没有提交到版本库下的暂存区。

image-20200906105451230

3. 提交到暂存区:也叫追踪,git add 文件名git add .,前者提交指定文件,后者提交所有文件。需要注意的是,当文件名有空格的时候,应该在空格前加一个\,否则会错误识别命令。

image-20200906105647692

再次使用git status查看下工作目录的情况,如下图所示。

image-20200906111537268

万一发现追踪的文件错了呢,该怎么撤回?其实上图已经说明了,可以使用git rm --cached 文件名来进行取消追踪。

4. 提交到本地master分支:git commit -m '提交描述'

image-20200906111850951

5. 查看提交日志:git log

image-20200906112005612

6. 同步到远程仓库:git push origin master,其中origin是远程仓库的名字,master是远程仓库的分支名称。

image-20200906112829737

然后在Github上就可以看到我们提交到本地master分支的文件了,如下图所示。

image-20200906112913250

7. 总结:刚刚上述流程可以用下面一张图来进行描述,master上的HEAD后续再进行介绍。

image-20200906112157800

模型2:多人工作模型1.0

多人工作模型和单人工作模型最大的区别是:单人工作由始至终都是自己在push,而多人工作不仅自己在push,别人也需要push,因此自己也需要把别人push上去的代码给pull下来(这是个核心)

1. 模拟环境

重新从远程仓库克隆两份,一份模拟自己,一份模拟同事。拓展一下,git clone 地址 目录名,在地址后加个目录名可以自定义版本库根目录的名字。

image-20200906170208743

2. 模拟同事Push代码 角色:[同事]

在同事的版本库根目录下新建一个test.txt文件,然后cd到同事的版本库根目录,进行git addgit commitgit push一系列操作,如下图所示。

image-20200906170858626

3. 把同事Push的代码Pull下来 角色:[自己]

切换会自己的版本库根目录,使用git pull来把同事push的代码给pull下来。

image-20200906171433700

4. 总结

这就完成一次简单的合作了,简单的模型如下:

  • 同事:使用add把代码到暂存区,再commit代码到本地分支,再push到远程仓库。
  • 自己:使用pull把新代码pull下来。

模型3:多人工作模型2.0

上述模型好像没有什么问题,但是实际上有一个严重的限制:同一时间内只能有一个人在工作,回到上述的场景,也就是说只有当同事把新代码push到远程仓库后,自己才能pull下来。如果同时工作,就会发生冲突:如果同事先于自己push代码,而自己是后面push的,会因为远程仓库含有本地仓库没有的文件(指的是同事先push的代码)而导致push失败。

1. 场景模拟:

首先,同事先push新代码new.txt,如下图所示。

image-20200906173701425

其次,再切换回自己版本库根目录,然后push自己的新代码mynew.txt,push失败,原因是远程仓库包含本地仓库所没有的,如下图所示。

image-20200906175057024

2. 解决方案

先用git pull把远端仓库上的新内容取回到本地和本地合并,然后再把合并后的本地仓库向远端仓库推送,但是却弹出以下窗口。

image-20200906175420554

这是因为git pull发现远程仓库没有本地仓库的commit,本地仓库也没有远程仓库的commit,他会把远程和本地进行合并,从而生成一个新的commit,而上面这个界面就是自动生成commit的提交界面。和手动commit不同,解决冲突的commit会自动输入默认提交信息,就是上图中的Merge branch 'master' of xxxxxxx

像上述这种场景,把不同内容(远程和本地不同)进行合并,生成新的commit,叫做合并。

在这里我采用默认的提交信息,按下键盘上的ZZ进行提交,如下图所示。

image-20200906224337334

更多

后续内容等想到再更新吧,现在也不知道要更新啥~

©著作权归作者所有

发表评论

正在加载 Emoji