要怎样才能弄清楚Git?
首先
作为一名游走在软件开发初级阶段的小菜,一直以来弄不清git、github,即使以前也尝试用过基本功能,但由于时(tuo)间(yan)紧(zheng),今天才下定决心乘着周末,好好把Git的概念和基本用法弄懂,无奈记忆力差,只得借助这篇笔记帮助自己记忆了。
人类的大脑在信息检索上,效率是极高的。然而前提是我们得先记住它们 —— ^_^
誊抄别人的文章我一向是拒绝的,正因为觉得文章需要原创,所以我的简书上就还没啥文章。也正赤裸裸的说明,本菜还是太菜。能和大家分享的东西太少。但我愿同各位能看完这篇笔记的小菜们一同努力。
It's never too late to mend.
在此
感谢《ProGit》一书
感谢伯乐在线提供的中文翻译,想要快速了解概要的朋友继续往下,想要彻底弄清的朋友请查看原文。
概要
集中化的版本控制系统
VCS(Version Control System)猜的,版本控制系统最早是本地版本控制——RCS。后来为了协同工作,CVCS(Centralized Version Control Systems)应运而生,代表有CVS,Subversion(SVN) 以及 Perforce 等。
CVCS.png核心是文件的版本控制集中在一台中央服务器进行处理,多对一的关系进行协同工作。统一的权限管理。如图:
缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就还是会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端 提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题,只要整个项 目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式的版本控制系统(包含Git)
DVCS( Distributed Version Control System ), 有Git、Mercurial、Bazaar 以及 Darcs 等。
注意:Git是 "版本控制",Github是"代码托管",两者概念不同
在这类系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。如图:
GVCS.png
优点是,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。整个系统是一个多对多的关系,灵活性高,成员和成员之间通过各自的代码仓库进行远程交互。
关于"分布式"和"集中式"VCS的工作原理是有差异的,详情见:Git详解之一:Git起步
主角 —— Git
安装
根据机型自行百度,mac XCode自带git,不建议重新下载,一般都是自己给自己挖坑,熟悉包管理和shell相关技术的同学自便。
使用
1、首先cd到需要版本控制的目录
$ git init
此时文件夹下会创建.git文件,所有 Git 需要的数据和资源都存放在这个目录中。
2、在git初始化的工作空间(文件夹)中,一开始所有文件都没有被管理(跟踪或未跟踪)
在Git中,所受管理的文件只有三种状态:
- 已提交(committed)(提交并保存到仓库)
- 已修改(modified)(修改后还没有保存到暂存区域)
-
已暂存(staged)(保存到暂存区域)
$ git add README 注意:这里说的"被管理"即:通过add添加文件让git知道要跟踪这个文件的变化 tip:通过配置".gitignore"文件可以指定忽略哪些文件或指定几个文件
3、查看状态
$ git status
一定要理清楚 add 和 status 的作用 ,参见Git详解之二:Git基础
4、.gitignore文件(自己创建配置,和.git放在同一层文件夹)
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
Git的用法远远不止这些,我在此也无法说完。只能做一个大概的基础认知总结,更多好玩有趣的功能还请各位移步Git详解之二:Git基础,一定要去好好看看,别像我一样_!
总结
至此,说说我自己的感受,之前一直囫囵吞枣的以为Git嘛,用到了再去查,先了解大概能用就行,就像学程序一样,用到什么组件再去查用法。但是我现在知道错了。正是因为这样的想法,导致对Git产生了恐惧觉得复杂高深,直到今天静下心来认真学习才发现,摸清楚了原理以后。也没那么难!也觉得自己应该反思一下以前对待Git的态度 了。
再次感谢《ProGit》一书,
和伯乐在线提供的中文翻译。如果想吃透Git,一定得去好好看看。