本学期的“系统综合实验”是个多人项目,内容是制作一个仿SQlite的单机数据库,当然层次低了很多很多。实验过程中需要用到版本控制,于是就想借此机会好好学习一下Git。以前用Git的时候无非就是用点简单的命令,或者是使用IDE里的可视化插件完成的,现在打算比较系统地学习一下。
安装什么的就不用说了,都比较简单。windows下的Git会提供两个命令行工具:一个Git CMD,一个Git Bash,前者是win风格,后者是Linux Shell风格,推荐使用后者。Git Bash这东西看起来很熟悉,风格和以前用过的的Cygwin类似,里面除了Git自己的命令外还提供一些常用的Linux命令,但是相比Cygwin就少多了。
从零学起,首先是最基本的概念—repository,版本仓库。Git会将版本库里的文件追踪并管理起来,针对其中每个文件的改动都会被记录下来,并在需要的时候进行还原。建立本地仓库之前首先建立本地仓库的文件夹,选择一个合适的地方起个自己喜欢的额名字就行了:
$ mkdir localgit
$ cd localgit
如上,这个文件夹建立好之后知识很普通的一个文件夹,还需要将对其进行初始化让Git可以追踪并管理其内部的信息,初始化命令是git init,用法如下:
$ git init
Initialized empty Git repository in E:/GitWarehouse/localgit/.git/
可以看到该命令执行后当前仓库下出现了一个.git文件,为了安全起见,这个文件是隐藏的,可以使用-ah选项对其进行查看。在进行下一步之前,首先澄清一个东西,其实我也很意外:所有的版本控制系统,其实只能跟踪文本文件的改动,对于图片、视频这些二进制文件(blob),虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道(引自廖雪峰老师)。
然后我们就可以开始进行一些测试了,新建一个文件并写进去几句话,MINGW里也提供了vi,所以我们可以直接使用vi来完成。在其中插入如下信息:
this boy is huper and he’s so stupid!
这样我们等于就添加了一个改动,那么如何让git了解这个改动呢?或者说想git提交这个改动?如下:
$ git add ./huper.txt
warning: LF will be replaced by CRLF in huper.txt.
The file will have its original line endings in your working directory.
$ git commit -m "update"
[master (root-commit) 9dc246f] update
1 file changed, 2 insertions(+)
create mode 100644 huper.txt
add命令是将变动过的文件添加到“暂存区”,当然实际上不管这个文件有没有改变你都可以add它,添加多个文件时用空格隔开就行了。add下的warning是由于Linux和windows下的换行符不一致导致的。commit命令是提交“暂存区”里的修改,也就是告诉git记录下这个修改,其中-m选项是提交信息。为了方便管理,每次提交的时候添加提交信息是良好的习惯。commit之后会返回你最近提交的一次记录相比上次提交的记录修改的大体信息。
总结:
创建本地仓库 -> git init -> 改动文件 -> git add -> git commit