码云+VSCode实现简易版本管理

本文介绍的是git最简易的版本控制(可能是人类历史上最简易的教程),并且充分利用vscode的源代码管理功能。

若要实现更多的git功能,请参照git教程:https://git-scm.com/book/zh/v2/

前言

当开发一个团队项目时,往往会遇到以下的问题:

我该如何得到其他成员对代码的改动

我该如何与另一个成员同时开发一个文件

我对代码作出了改动,我如何把代码分发给其他成员

如果某一次发布出了问题,我该如何将版本倒退回之前的某一个阶段

以上问题的解决办法,是使用版本控制系统,版本控制系统正是为解决以上问题而出现的。

目前,市面上的版本控制系统有很多,它们大致分为两大阵营:

SVN:所有的版本信息、开发者信息、代码全部交由服务器管理。团队成员的本地文件和服务器文件进行同步。它的风险在于服务器一旦毁坏,版本库的所有信息会完全丢失。

git:目前最流行的版本管理系统,使用分布式的方式进行版本控制,团队中的每个成员都拥有完整的版本库,任何一台计算机失效,都无法导致工作丢失。

本文使用git作为版本控制系统。

git的官方网站就是大名鼎鼎的github,但由于其服务器位于国外,可能会遇到网络传输的问题。好在国内有很多基于git原理实现的版本服务器,我们可以在其中选择一个使用。

本文选择使用码云作为版本控制服务器。

1. 建立远程仓库

码云仓库被称之为中国的github,和github一样,它是一个基于git的版本控制系统,

1. 注册账号

进入码云官网:https://gitee.com/,注册一个账号,然后登录。

注册完成后,会提示绑定手机号,该步骤可以忽略:

2. 创建仓库

根据提示,创建一个远程仓库,通常,一个项目对应一个远程仓库。

到目前为止,你已经在远程服务器上创建了一个项目仓库,接下来,你需要在本地安装git,并在本地建立仓库,最后实现本地仓库和远程仓库的同步。

2. 创建本地仓库

1. 安装

双击安装文件,一路默认即可完成安装。

2. 配置

每个安装了git的计算机可以看作是一个项目的开发者,首先,你需要配置你的名字和邮箱,以便让你的团队知道你是谁。

打开控制台,运行以下命令:

git config --global user.name "你的名字" git config --global user.name "你的邮箱"

3. 克隆远程仓库到本地

现在,我们的本地计算机上拥有了git,就可以建立本地仓库了。

本地仓库可以直接使用

git init

命令创建,也可以将远程仓库克隆下来,形成本地仓库。这里,我们选择后一种方式。

请按照下面的步骤完成:

找一个文件夹,在命令行中进入该文件夹,之后,我们将从远程克隆仓库到在该文件夹中。

比如,我现在选择d:\pj作为克隆远程仓库的文件夹,在命令行进入该文件夹后,我可以使用下面的命令完成对远程库的克隆:

git clone https://gitee.com/277739025/maoyan.git

命令中的

https://gitee.com/277739025/maoyan.git

需要替换为你码云上的仓库地址。

如果没有意外,你将看到你的文件夹中多了一个子文件夹,它就是你的工程目录。

接下来,你可以在vscode中打开该文件夹,进行本地项目的开发了。

你会看到文件夹中包含了两个文件:.gitignore和LICENSE,这两个文件暂时不用管它。

现在,我们用express生成器来生成一个工程:

express --no-view

4. 使用VSCODE管理本地仓库

现在,你会发现你的工程跟之前的有点小区别,每个文件后面多了一个符号或者小圆点:

这是什么情况呢?

这是因为该文件夹中的文件处于git版本控制当中,但要注意的是,这种版本控制,与你的远程仓库无关,仅仅是在本地仓库中控制。(还记得之前所说的吗?git是分布式的,每台计算机中的每个仓库,都是一个完整的版本控制系统)

要完成版本控制的各种操作,需要使用各种繁琐的git命令去完成。

好在VSCODE编辑器很智能,它已经将很多常用的简易操作可视化了,因此,我们只需要在VSCODE中动动鼠标即可完成各种操作。

接下来,我们来学习如何使用VSCODE完成版本控制。

提交修改

当我们在工程中作出以下操作时,git均认为是一种修改:

修改文件内容

添加文件

删除文件

注意:一个空的文件夹是不会被版本记录的,版本记录的只有文件!

当修改发生后,我们可以将这些修改一并提交给git,git会将它们记录到仓库中(你可以理解为仓库中新增了一个版本)

实际的过程是要先将修改提交到暂存区,然后将暂存区中的内容再提交到仓库,这样做有诸多好处,但为了简化流程,我们选择直接提交。

点击VSCODE左侧的源代码管理选项:

可以看到,目前有很多修改需要等待你提交,你可以现在提交,也可以等到将来更多的修改完成后再提交。

我们现在就开始提交,一定要注意,现在提交到的是本地仓库,而不是远程。

点击顶部的提交按钮,一次性提交所有修改:

此时,会弹出提交消息,必须要填写!取一个适当的名称来标识这一个版本,输入完成后按下回车即可。

提交结束后,你会看到源代码管理面板中清空了,表示目前没有任何修改需要提交(因为之前的修改已经被记录下来了)

现在,我们再建立一个model文件夹,然后在文件夹中创建一个db.js

现在,我们对工程做一些改动,比如,删除掉默认的静态文件、删除掉默认的routes,修改以下app.js。

你会看到左侧的版本管理器又有了新消息,它在提示你:现在有一些更改需要等待提交:

你可以不用管它,继续你的工作,之后一并提交,也可以现在立即提交。

通常情况下,我们完成一个小功能点后才会进行一次提交,比如:一个函数的实现、一个页面、一个css等等。

不过为了测试,我们现在再提交一次。

查看历史提交记录

目前,我们本地仓库中应该包含了3次版本记录,它们分别是:

从远程克隆并创建工程

用express生成器初始化了工程

删除了一些默认文件

我们可以在控制台中使用命令来查看提交历史:

git log --pretty=oneline

结果为:

最新的提交版本在最上方,每个版本都对应一个hash字符串,用来唯一的标识该版本,你可以把它当作是版本编号。

你也可以用

git log

命令,查看每次提交更加详细的信息

它额外显示了作者和时间,这样你就能够清楚的知道提交的时间和作者是谁了。

版本回退

有的时候,由于某些原因,我们需要将当前版本回退到之前的某一个版本。

使用下面的命令,将版本回退到之前的某个版本:

git reset --hard 版本的hash码

还记得版本的hash码吗?它是用来唯一的标识版本的,你可以用

git log

来查看每个版本的hash码,你不需要写全,一般写前5位就可以了,git会自动帮你补全,例如:

git reset --hard b41b

现在看看,工作目录是不是已经回退到之前的版本了。

现在,再使用

git log

来查看版本,你会发现之前的最新版本已经没有了。

版本前进

如果你在回退后,又想立即前进到之前的最新版本,只要你还记得最新版本的hash值,就可以做到

这里要特别注意,如果你回退后又有新的版本提交,可能你永远也无法找到之前的最新版本了。

使用的命名依旧:

git reset --hard b41b

忽略文件或文件夹

工程中有些东西我们是不希望进行版本控制的,比如node_modules文件夹或一些用户本地测试的文件。

如何通知git不要取跟踪它们的变化呢?

方法是在工程根目录下建立一个.gitignore文件,该文件中记录了哪些文件或文件夹不要被跟踪。

这个文件其实我们已经有了,在里面找找看,看能否找到node_modules文件夹?

现在,使用cnpm install命令安装各种包,这个操作会导致生成node_modules文件夹。

cnpm install

我们可以看到该文件夹是暗色的,表示没有被git跟踪。

3. 本地-远程同步

同步分为拉取和推送:

拉取:从远程仓库中获取最新的版本,如果其他同事发布了一些新的代码,你的开发又需要用到这些代码,你要使用该操作。

推送:将本地仓库中的版本发布到远程仓库,如果你的开发到了一个阶段,完成了一个重要功能,并且通过了测试,你需要用到该操作。

推送

现在,我们把目前的工程推送到远程,其实,推送就是一个同步仓库的操作:

打开VSCODE的源代码管理,点击更多中的推送:

此时,会弹出对话框,让你输入码云的账号和密码,输入即可。

现在到你的码云仓库中刷新页面,就可以看到新的版本了。

目前,服务器的版本和本地的版本就保持了同步:

现在,我们在工程中加入一个新的文件student.js

然后分别:

提交到本地仓库

推送到远程仓库

完成后,到码云仓库可以看到新的版本,目前本地和服务器版本如下:

拉取

准备工作

现在,为了模拟团队协作,你需要找到一个小伙伴,安利他也去注册一个码云账号(当然,你可以用精神分裂的方式自己模拟小伙伴,并且注册一个新的账号)

注册完成后,你的小伙伴并没有你的工程,需要让他克隆一个(克隆操作还记得吗?)

克隆完成后,你的小伙伴只能在本地仓库中控制版本,并不能将其推送到你的远程仓库,如果人人都可以这样做,你的代码一定被搞的乱七八糟了。

所以,你现在需要将他的权限提升为开发者。

将你的邀请链接分享给他,他接受后,就可以推送他的代码到你的远程仓库了。

现在,请他添加一个course.js文件

然后:

提交版本

推送

拉取

再回到你的工程,你工程的版本已经落后于服务器了

现在,你应该从远程仓库拉取最新的版本

在VSCode的源代码管理器中,点击拉取即可。

拉取完成后,你就可以在工程目录中找到course.js了

版本冲突

现在,考虑一个经常遇到的问题。

比如,你先在本地仓库中修改并提交了student.js文件

此时,你的小伙伴修改了course.js,他提交了版本,并且做了推送。

此时,服务器、你、小伙伴的版本状态如下:

仔细观察,你会发现,你本地仓库的最新版本,和远程仓库的最新版本出现了冲突。

此时,你无论作出推送操作、还是作出拉取操作,都会出问题。

我们以推送为例,看如何解决冲突。

在VSCode中点击推送

弹出一个错误:

这个错误明确告诉你,你现在不能推送,否则版本无法统一。你必须要先使用拉取解决冲突后,才能推送。

好吧,我们先拉取

在VSCode中点击拉取

拉取之后,仓库版本如下:

为什么最后会多一个merge呢?那是因为从服务器拉取了hello后,由于你本地多了一个版本(学生路由get请求),而这个版本服务器是没有的,于是,需要将两个版本的操作进行合并,成为一个新的版本merge,来表示最新版本。

在VSCode中再次点击推送

推送成功!

现在版本如下:

总之:推送的时候发生失败,往往是版本不一致,需要先拉取后再推送

接下来,另一个问题,你的小伙伴那里还没有student.js的新内容,他如果也对student.js进行了修改会怎么样呢?

让你的小伙伴修改student.js,然后提交到本地仓库

然后让你的小伙伴进行推送,当然,会报错,会让他先拉取

拉取后,他会发现远程的student.js和自己写的student.js不一样了,VSCode会给出提示,让他去解决这个冲突。

解决后,再进行推送即可。

总结

当团队进行开发时,按照以下纪律进行:

每天打开项目后,拉取最新

完成一个函数、页面、或一段复杂功能代码后,提交本地仓库

完成一个重要功能,并测试无误后,推送

推送失败时,往往是因为版本冲突导致的,拉取最新

拉取时,可能有文件内容上的冲突,解决冲突即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190531A0IDB400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券