在毕业入职后发现,基本上所有公司都会将工作文档以及目录存放在版本控制工具中,而版本控制工具常用的有SVN以及Git,因为现在的公司用的是Git,故在此仅介绍Git的使用。
0 版本控制工具
0.1 为什么要使用版本控制工具
在工作中我们常常需要通过修改各类文档,但如果需要恢复到编辑之前的文档,最简单的方式就是在编辑前将文档备份,我们在备份前通常在文档名或目录名上添加编辑的日期。但是如果每次编辑文档都要实现复制,会使得操作非常繁琐,也容易出错。
况且毫无规律的命名将会导致使用者无法区分最新的文档,如果是共享文件的话,还需要加上编辑者的姓名。并且,这些文档名字没有体现修改内容。
另外,当两个人同时编辑某个共享文档,先进行编辑的人所做的修改内容将会被覆盖。
Git版本控制系统就是为此而产生的。
0.2 使用Git进行版本管理
Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档恢复到以前的状态,也可以显示编辑前后的内容差异。
而且,编辑旧文件后,试图覆盖较新的文件的时候,系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。
1 管理历史记录的数据库
数据库 (Repository) 是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。
1.1 远程数据库和本地数据库
Git的数据库分为远程数据库和本地数据库。
- 远程数据库: 配有专用的服务器,为了多人共享而建立的数据库。
- 本地数据库: 为了方便用户个人使用,在自己的机器上配置的数据库。
程序员在测试开发的时候一般使用本地数据库进行对代码的测试修改,如果需要公开本地数据库中修改的内容,就将修改的内容上传远程数据库(push)。此外,开发人员也可以通过远程数据库来获取其他hu人修改的内容(pull)。
1.2 创建数据库
创建本地数据库的方法有两种:一种是创建全新的数据库,另一种这是复制远程数据库。
首先在任意一个地方创建tutorial目录。若要把tutorial目录放在Git的管理之下,请右击后从菜单中选择[Git在这里创建版本库]。
2 修改记录的提交
若要把文件或目录的添加和变更保存到数据库,就需要进行提交。
执行提交后,数据库中会生成上次提交状态与当前状态的差异记录(也被称为revision)。
提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。
系统会根据修改的内容计算出没有重复的40位英文及数字来给提交命名。指定这个命名,就可以在数据库中找到相应的提交。
不同类别的修改(如bug修复和功能添加删除)要尽量分开提交,以方便以后从历史就里查找特定的修改内容。
执行提交时,系统会要求输入提交信息。请务必输入提交信息,因为在空白的状态下执行提交会失败的。
查看其他人提交的修改内容或自己的历史记录的时候,提交信息是需要用到的重要资料。所以请用心填写修改内容的提交信息,以方便别人理解。
以下是Git的标准注解:第1行:提交修改内容的摘要 第2行:空行 第3行以后:修改的理由
请以这种格式填写提交信息
3 工作树和索引
在Git管理下,大家实际操作的目录被称为工作树。
在数据库和工作树之间有索引,索引是为了向数据库提交做准备的区域。
Git在执行提交时,不是直接将工作树的状态保存到数据库,而是将设置在中建索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。
所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。
4 共享数据库
4.1 push到远程数据库
- 推送
为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。
为此,需要在Git执行推送(Push)操作。执行Push之后,本地的修改记录会被上川岛远程数据库。所以远程数据库的修改记录就会和本地书库的修改记录保持同步。
4.2 克隆远程数据库
进行克隆(Clone)操作就可以复制远程数据库。
执行克隆后,远程数据库的全部内容都会被下载。之后您在另一台机器的本地数据库上进行操作。
克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行产看记录或其他操作。
4.3 从远程数据库pull
若是共享的远程数据库由多人同时作业,那么作业完毕后所有人都要把修改推送到远程数据库。然后,自己的本地数据库也需要更新其他人推送的变更内容。
- Pull
进行拉取(Pull)操作就可以把远程数据库的内容更新到本地数据库。
进行拉取(Pull)操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。