本系列文章希望探讨以硬件为平台讲述C(C++)知识的一个新的途径,改变目前大多数C语言教程仅注重C语言本身的语法规则,而脱离其应用环境的现状。希望读者通过本教程的学习,能够立刻学以致用,真正将所学知识应用到项目实践中。
开发环境:Atmel Studio 7.0
硬件平台:Microchip AVR ATmega168PA
参考教材:C++程序设计(第3版) 谭浩强编著,清华大学出版社
备注:教程仅适合初学者,高手请绕过
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
下面,我们在工作目录下建立2个文件,如下图所示:
我们可以使用状态查看命令进行查看,通过提示信息可以看到,当前为主分支(branch master),有2个未被跟踪的文件main.c和readme.txt。
请记住,工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。所以使用 Git 时的文件状态变化周期如图所示。
我们可以使用add命令对文件进行跟踪,下述命令完成后,readme.txt就已变成跟踪文件(unmodified,并已经暂存),main.c仍然处于未跟踪态。
下面,我们同样将main.c文件也加入进来,再看下效果,应该能够很好理解。
下面我们对main.c文件进行修改,在其中加入主函数,然后保存文件。
我们再查看状态,如下图所示,仔细分析可以看出,main.c和readme.txt都已变成跟踪文件(unmodified,并已经暂存),而且main.c已经修改。可以再准确的理解一下,现在main.c有2个版本,1个是已暂存的,另1个是已就修改的。
如果希望将main.c变为已暂存的状态,还需使用add命令,如下图所示。
接下来,我们在当前工作目录下继续创建文件,如下图所示。
我们假设main.o为main.c编译后的目标文件,在大部分情况下,我们都不希望跟踪目标文件,但是当我们显示其状态时,还是会显示的,如下图所示。
如何对这些文件进行忽略呢?这就需要用到.gitignore,我们可以将不希望使用的文件类型加入到该文件中。由于在windows环境下,不能建立仅含有后缀名的文件,所以这个文件的建立,还需要经过以下步骤:
1、建立gitignore文件。
2、将gitignore冲名为.gitignore文件。
接下来,我们就可以对.gitignore文件进行编辑了,例如我们希望忽略以.o结尾的文件,我们只需要在.gitignore文件中编辑如下代码即可。
*.o
接下来,我们再查看状态,就不会再显示以.o为后缀名的文件了,如下图所示。
.gitignore有1套详尽的语法规则,我将在后续的教程中详细讲解,在这里仅给出1个例子,以供参考。
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
接下来,我们继续对main.c文件进行修改,加入while(1)循环,如下图所示。
我们,先来看一下状态,如下图所示。已暂存的文件:main.c和readme.txt,修改的文件main.c,未跟踪的文件.gitignore。
接下来,我们就可以查看文件差异了,需要使用diff命令,如下图所示。该命令对当前已修改的文件和已暂存的文件进行了比较,可以看到我们在main中加入了while(1)循环。
还有1种比较是将当前已暂存的文件和提交的文件进行比较,其命令是使用diff命令的--cached命令。可以看到原先的文件(可看作已提交的)为空,已暂存的文件已有main函数的代码。
接下来,我们将main.c变为已暂存态,需要用到add命令,再进行对比查看,如下图所示,大家仔细分析一下即可。
接下来就可对文件进行提交了,记住这里使用的命令是提交暂存区域中的文件,我们在提交前应当查看一下是否还有修改过的文件,确认后在提交,提交命令如下:
在提交的过程中,会打开指定的文本编辑器(查看基于硬件的C(C++)语言程序设计教程16:管理自己的代码1——Git起步) ,我这里推荐使用的是Visual Studio Code,在这里我们添加版本说明,以便于代码的维护。
提交后,我们再查看状态就仅剩下未被跟踪的.gitignore文件了,如下图所示。
我们可以使用log命令进行日志查看,如下图所示,日志查看有很多的形式,这些形式用起来非常灵活,我们将在后续的教程中单独讲解。
接下来,我们再对文件进行修改,看一下日志的情况,我们在main.c中加入一个max函数,如下图所示。
我们将其变为暂存状态。
下面我们提交该文件。
下图是日志中,我写入的内容。
上述工作完成后,我们再来查看日志文件,如下图所示,可以看到每次修改的情况,在日志中都有显示。
最后,我们看一下版本回退的方法,我们可以使用reflog命令列出,其内部版本号,如下图所示。
例如,我们希望回退到只有main函数和无限循环时的状态,我们可以输入下列命令。
现在,我们再次打开main.c文件,可以看到仅有main函数和无限循环。
我们再次查看提交日志,如下图所示,表明已经版本回退,查看具体细节可以使用reflog命令。
任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。
原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。