抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Git

Git是什么

Git是一种源代码版本控制系统(VCS),什么叫版本控制系统呢?

假设你写了一个Word文档,叫做《我的idea》.docx。

第一天,你blahblah写了不少点子,把它保存了下来;

第二天,你发现昨天的点子有一些纰漏,你将其更改了一些;

第三天,你发现第二天干坏事了,不小心删除了一个重要的点子,然而你已经想不起来那个点子了!

这时就体现出版本控制系统的重要性了,版本控制系统可以记录你每一次的文件更改,如果你用了版本控制系统的话,你可以将你的文件还原到任意一次更改时的状况。

PS:git版本控制系统实际上不适合docx这类非纯文本文件,在此处只是举例,源代码(纯文本文件)才是git大放光彩的地方。

Git的用法

详细用法不在此介绍我也不会

常见操作如下:

  1. 克隆服务器上的git项目

    git clone xxxxx.git [可选:文件夹名] 

    其中“xxxxx.git”为你的项目地址。

    执行完成后会看到当前目录下多出了一个文件夹,其名为[你克隆来的git项目名]/[你指定的文件夹名]。

    比如我克隆一个测试仓库,执行

    git clone https://github.com/EzraRT/testgit.git

    一番翻云覆雨后,就把代码仓库克隆下来了,得到一个如下的文件夹

    进入该文件夹,里面存放了此代码仓库的最新代码,还有一个特殊的文件夹

    这个.git文件夹,便是git仓库的数据文件,一般它是一个隐藏文件夹,需要手动开启“显示隐藏的项目”才能看到它。

    对于其中的内容我们暂且不深入,只要知道它储存了一些git的数据即可。

    这是我不久前创建的代码仓库,仅有一个说明文件(README.md)和一个.gitignore文件。

    接下来我们要介绍如何参与到代码改动的工作中去,让我们仔细地观察这张图

    服务器:Remote

    本地仓库:Repository

    工作区:workspace

    目录:Index

    其中,本地仓库、工作区,目录都位于你的电脑上,只有服务器位于服务器上废话,而你编辑代码时所做的更改都位于你的工作区,如何一步一步地提交代码改动并上传到服务器呢?

  2. 提交更改

    git add 文件名 [文件名1] [文件名2] [...] 

    这个指令是告诉git你更改的文件,git会将这几个文件于此时此刻保存起来(将某些信息保存在.git文件夹中),注意,之后你对该文件执行了更改,需要重新执行一遍add命令,不然git认为它还是上一次执行add时的模样。

    git commit -m "提交信息" 

    这便提交了你的代码更改操作,你应在[提交信息]中简明扼要地说明你对代码进行了何种改动。

    如果你进行了很多文件的更改,不想一个一个add它们,也可以执行:

    git commit -a -m "提交信息" 

    这个-a选项即是让git把所有未add、但发生了更改的文件记录下来准备提交。一般地,使用此种方法可以快速地提交你的代码更改。

  3. 获取服务器上的最新版本代码

    在你克隆下来的git项目的目录下执行(先别执行!)

    git pull

    但git常常用在团队合作中,如果有人在你之前更改了服务器上的代码,而你浑然不知,改了一些代码,准备提交到服务器上,傻傻地获取最新代码然后提交你的改动,这时会发生什么状况呢?

    情况1:你和他改动的代码并无冲突(你们更改的不是同一个文件或是同一个文件的不同部分)

    情况2:你和他的改动有git难以处理的冲突,此时强行pull会造成很多的问题,比如你的改动被覆盖(白干半天)。

    关于这几种情况处理起来比较复杂(虽然git是有处理方法的),我们介绍一种比较好的处理方式。

    先执行

    git fetch

    获取服务器上的最新代码,但不合并到你本地的代码中。如何理解这句话?让我们回到这张图

    你add&commit操作都是在本地进行的操作,服务器浑然不知你的工作,而你不想白干活,因此要从服务器上fetch(拉取)服务器上的最新改动,并以此判断是否需要提交你的更改,同时也可以完成一些冲突的处理。但如果执行了pull操作,便会把代码改动直接应用到你的工作区,如果正好有人在你之前提交了某文件的更改,而你恰好也更改了它,这就是悲剧的开始。

    因此,先fetch下代码改动并利用diff工具(代码比较工具)查看改动,确认没有冲突之后再pull并提交代码改动。

  4. 提交代码更改给服务器

    终于到了这一激动人心的一刻,你的工作将被记录下来并保存到服务器上,执行

    git push

    便可以将你此前提交的代码更改(commit)告诉服务器了。如果执行push时git告诉你:“你的代码不是最新版本”,那想必是你又慢人一步了,请从第2点重新操作。

​ 总结:参与到某git项目的代码维护工作中,你需要做的事有:

​ 首先,clone对应的项目;

​ 参与代码的改动工作,进行代码改动的基本流程如下:

​ fetch服务器的更改、仔细比较并确认、pull拉取最新的代码更改到你的工作区,commit提交你的代码改动、push上传你的代码改动到服务器。

日常使用的Git用法(利用软件集成的版本控制系统)

生活在现代的我们,往往不用操作如此繁琐的命令,此处介绍VSCode的图形化git工具,它可以帮助我们完成大部分的工作。

有关VSCode安装的相关教程可以查看这个

首先用VSCode打开我们git项目的目录,进行一番改动后,界面如下

对于这几处,与你平常编写代码时不一样的显示,我们从左到右进行说明。

  1. 文件改动列表(版本控制栏)

    最左边,标记了一个数字,这是VSCode集成的版本管理系统(git工具),其界面如下图

    你对文件进行的更改都会罗列在此处,本例中,我们改动了test.cc文件、新建了main.cc文件、删除了README.md文件,在此处点击它,便可以在右侧看到它与上一次提交的变化

    左侧为改动前的文件,右侧为改动后的文件,此处我们将一句感叹编写成了一个可以编译执行的感叹。

  2. 某文件改动情况

    对于有所改动的文件,它会在文件名右方显示改动的类型

    蓝色的M是modified的意思,译为已被更改,说明我们对此文件进行了更改操作;

    绿色的U,untracked,说明你新建了该文件且没有提交;

    红色的D(可以在1:文件改动列表中查看),deleted,说明你删除了该文件。

  3. 每一行的改动情况

    对应颜色与上述文件改动类型对应

    这时我们如何利用图形界面进行commit、pull、push操作呢?

    在版本控制栏中,点击文件名后面的小加号可以把它提交到舞台上(OnStage),接着在上方的Message栏输入你的提交说明,最后点击这个勾,便将你[提交到Stage]的改动commit完成了。

    最后,将你的代码改动push到服务器上去

    等等!pull、fetch操作呢?说好的代码安全呢?

    在VSCode的左下角,有一个循环模样的小按钮

    其旁边的数字指示了你比服务器落后了多少个commit(下载箭头指示,可能是别人提交的)、你比服务器领先多少个commit(上传箭头指示,你想要提交的代码更改)。

    点击它,便会执行pull&push操作,且在与服务器有冲突时会询问你该怎么办。具体情况具体对待,此处不做延伸。

    这便是我们日常使用中对git的使用,相比命令行,对文件的改动变得显而易见,你可以利用图形化的diff工具比较每一处改动、用版本控制工具查看文件历史(该文件的每次更改情况)等等。

附录:.gitignore文件是什么呢?ignore的意思是忽略,此文件是一个文本文件,里面罗列了git进行代码比较、提交更改时忽略的文件、文件类型、文件夹等等。

评论