下载与安装

​ 翻墙,进入Git官网下载对应版本并安装,需要同Vscode下载在同一台电脑上。安装完成后于桌面右键→Git Bash Here,若成功打开命令窗口则环境配置成功。

​ Git 是一个分布式的代码托管工具,其工作流程如下:

其中:

  1. Working Directory (工作区):我们编辑与变动的代码文件,都在工作区下;
  2. Stating Area (缓存区):代码有变动的时候,我们可以把每次变动后的代码,提交到 git 缓存区。让 git 记录代码的变动;
  3. Respository (仓库):在 git 缓存区的代码,都可以提交到 git 仓库进行托管。从图中可以看到,本地的仓库(一般指PC)可以将代码提交到远程的仓库(一般指 git 服务器,如github和国内的gitee)。

一般工作流程:本地配置Git仓库→编写代码→提交到本地仓库(一般指PC)→提交到远端仓库(此处以gitee为例)→从远端仓库下载最新的代码→循环

  • 本文中,第二章的内容主要用于让读者产生一个对git的全工作流程有一个简单的认识,通过bash对git的操作,从零开始新建test项目加深对齐理解。在第三章中主要介绍如何通过VSCode和gitee管理git项目,是一种比较常用的项目管理和协作方式
  • 跳过第二章的内容不会对第三章和后续使用产生较大的影响(在了解过前文所述的工作流程的基础上),但若时间充裕可以尝试一下新建项目的流程。

从零开始新建项目全流程

以下内容建议使用新的test来进行尝试,不要第一次上手就在成型的库里操作,以免打乱文件

Git初始化与建立远端连接

​ 在PC工作区新建一个文件夹用于存放该项目的所有代码,在文件夹内执行右键→Git Bash Here进入Git命令窗口。输入git.init。观察到工作区内新增隐藏文件夹.git

​ 命令窗口输入以下代码进行基本配置。本地账户可以任意设置,与远端关系不大。

1
2
git config --global user.name "<myUserName>"   // <>内表示自行命名
git config --global user.email "<xxxx@qq.com>" // 可以是其他邮箱

​ 此时已经完成Git的初始化和基本配置,下面开始建立远端仓库连接。在网页端打开gitee并登录(注册),在右上角的“+”中选择新建仓库,并命名为test1。方便起见,这里都采用HTTPS的方式进行连接(SSH连接需要额外配置)。

​ 复制该仓库的HTTPS地址,比如https://gitee.com/akribis/test1.git。在命令窗口中输入:

1
git remote add origin https://gitee.com/akribis/test1.git

​ 若没有报错,则认为远端连接建立完成。

缓存、提交与推送

​ 代码上传的过程共分为三步——缓存、提交与推送,分别是代码(文件)经历本地工作区、缓冲区、本地仓库、远端仓库的过程。

  1. 缓存add(本地工作区→缓冲区)

    ​ 在本地工作区新建一个文件(以README.mdtest1.m为例),或者在本地工作区中对某个文件的内容进行了改动,需要在命令窗口进行如下操作(两种方法任选其一):

    1
    2
    3
    4
    5
    // method 1
    git add README.md
    git add test1.m
    // method 2
    git add .

    ​ 其中,git add .表示缓存所有内容,无需一个个操作。

  2. 提交commit(缓冲区→本地仓库)

    ​ 缓冲区仅用于记录更改,真正的托管需要在本地仓库中完成,操作如下:

    1
    git commit -m "<first commit test>"

    ​ 其中<>的内容表示版本说明,本次更新增加、删减了哪些内容

  3. 推送push(本地仓库→远端仓库)

    ​ 在建立过于远端仓库的连接的基础上,可以通过以下代码进行推送(同步):

    1
    git push -u origin master // 将本地当前的master分支提交远端master

    ​ 如果未在git上登录远端仓库gitee,会自动弹出gitee的登录框,输入gitee账号的账户与密码登录即可。可以在gitee上的仓库中看到,里面多了README.mdtest1.m两个文件。

远端同步与分支

​ 在其他同事更改完各自的代码并上传后,你需要更新你的本地仓库,这个将远端仓库的代码下载到本地的过程称之为同步,代码为pull。示例如下:

​ 在远端仓库gitee中新建一个分支,命名为Develop,选择从master中创建。分支的意义是不同开发人员对同一个项目在不同内容方向上独立工作,互不干扰。每个分支都从主分支上克隆,多个开发人员基于不同分支并行开发(在分支上进行测试以确保代码无误),完成后再合并到主分支(这一步由管理员进行)。

​ 回到同步,你可以在gitee上对新的Develop分支进行内容的修改,比如打开README.md输入一段随机字符串。这时这些修改在你的本地仓库PC上是未发生的(这一点可以通过在命令窗口中输入git branch得到,此时应该只有master分支),因此需要同步。在命令窗口中输入:

1
git pull

​ 此时会显示Already up to data(或者可能是其他的内容),而明明远端仓库要更加新一点。这是因为两端分支不同步导致的。你需要在PC上新建develop分支,如下:

1
git checkout develop

git checkout是切换分支的命令,这个时候(在之前已经执行过pull的基础上)它会自动帮你创建一个新分支develop并且和远端仓库关联(可以通过git branch命令验证)。如果希望验证该关联性,可以新建一个文件,再执行一边缓存、提交和推送的完整过程,观察gitee上是否有正确地更新。

​ 如何在本地观察当前分支呢?在工作区中打开命令窗口并使用git branch可以看到当前分支。此时使用git checkout命令则可以切换到另一个分支当中。如果两个分支中的文件不同,你会惊人的发现你的工作区(即文件夹中)的文件变了,如图:

​ 这里你也许已经发现使用命令窗口进行git配置非常麻烦:不可视化、文件管理仍然混乱、容易进到别的分支当中去而不自知。

以上内容主要是为了了解、熟悉Git的原理和操作,下面来讲解如何在VSCode中进行使用和同步。

基于VSCode的同步

创建VSCode与gitee的连接

​ VSCode在安装时默认会带有git管理的插件,图标是用曲线连接的三个点,可以通过Ctrl Shift G调出来。点击“初始化仓库”即可自动创建git,相当于git init

​ 通过下图图示操作添加远程库,在上方的URL框中输入gitee项目的链接(以.git结尾的URL),命名就是前文最早在git config中的命名,没有很深的含义。

​ 如下图所示,进行个人分支的选择和拷贝。可以直接在gitee网站上新建分支(最好是以自己的名字或分支功能命名),然后直接在这里选择“远程分支”;当然也可以在这里直接新建分支,然后把原分支的内容拷贝过来。这里以前者为例:

以后,左下角的这个标识就是你当前更改、上传、同步的分支。请时刻确保你更改的是自己的分支内容。

缓存、提交与推送

​ 还记得git的工作逻辑吗?缓存、提交与推送。这里一一演示。

  • 缓存:本地工作区→缓冲区

​ 图标右下角的“3”是指本次一共经过了三次修改,其中M/U/D分别表示修改/新建和删除。本地工作区和缓冲区就对应图中的“更改”和“暂存的更改”——所以缓冲区的本质就是暂存。这一步可以直接通过点击“更改”栏右边的“+”完成。

  • 提交:缓冲区→本地仓库

​ 提交的英文是Commit,这一步一个非常关键的步骤就是需要在提交的时候同时上传“提交说明”,来简述这次提交干了些什么事情。单击提交之后,VSCode会自动生成一个提交说明的文件,自动生成了本次提交的修改内容,需要在第一行中进行一些简单的说明。写完后点击右上角的“√”进行提交。

  • 推送:本地仓库→远端仓库

​ 推送的操作可以直接点击同步(这个命名不好,同步应该是从远端下载)或者右键…选择推送。可以在gitee上看到新的推送内容(在对应的分支中)。

远端同步

​ 有的时候,需要将你的代码更新为远端仓库中的版本。比如主支、主函数中更新了某些影响开发的重要内容(即存在改动A),而你上一次的开发尚未完成(即存在改动B),你显然希望同时保留两个修改:

  1. 假设现在你的本地仓库和远端仓库是一致的(当然好像不一致也没什么关系)

  2. 当你的远端仓库落后于主支时,会出现如下合并按钮:选择同步代码中的丢弃提交,这样你的远端仓库就会变成和主支一样(仅有更改A),如下:

  3. 为了保险起见,在第一次操作时可以为你的本地仓库创建一个copy

  4. 在VSCode上直接选择拉取(Pull),这样就能直接把远端仓库中的内容同步到本地。他会自动帮你兼容更改A和B:当A和B在不同文件中,或者同一个文件中的不同行、段落中时同时保留,当更改A和B在同一行时会产生冲突,VSCode会要求你主动选择保留哪一个。这个自动兼容又好又不好,hh。

合并

​ 当你的某一段开发完成之后,需要将其丢到主支上。但是为了不影响其他人的开发并且保证准确性,一般来讲要求先把你的程序丢到一个Test分支中,当测试通过之后再合并到主支main。这个test分支一般由测试工程师管理(啊是的,这就是为什么开发和测试天天吵架的原因,因为测试是合并到main的最后一道保障,要是出了什么问题都得他担着)。

​ 合并需要你先把代码推送到远端仓库中(参考上面的缓存、提交和推送),然后打开gitee,在你自己的分支中创建Pull Request,选择从自己的仓库同步到test分支中,输入一点说明,等待leader通过即可。