Git 版本控制
- 1. About Version Control (关于版本控制)
- 1.1. Local Version Control Systems (本地版本控制系统)
- 1.2. Centralized Version Control Systems (集中化的版本控制系统)
- 1.3. Distributed Version Control Systems (分布式版本控制系统)
- 2. 换行符的处理
- 3. keyboard shortcuts
- References
Pro Git (SECOND EDITION)
https://git-scm.com/book/en/v2
Pro Git (SECOND EDITION)
https://git-scm.com/book/zh/v2
1. About Version Control (关于版本控制)
Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer.
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,实际上可以对任何类型的文件进行版本控制。
Git 仓库管理功能是 GitHub 的核心。Git 是一个分布式版本管理系统,是为版本管理而设计的软件。Linux 的创始人 Linus Torvalds 在 2005 年开发了 Git 的原型程序。
集中型与分布式都各有优缺点,需要看具体情况而定。
1.1. Local Version Control Systems (本地版本控制系统)
Many people’s version-control method of choice is to copy files into another directory (perhaps a time-stamped directory, if they’re clever). This approach is very common because it is so simple, but it is also incredibly error prone. It is easy to forget which directory you’re in and accidentally write to the wrong file or copy over files you don’t mean to.
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
prone [prəʊn]:adj. 易于遭受,有做 (坏事) 的倾向,有做 ... 倾向的,易于遭受 ... 的
One of the most popular VCS tools was a system called RCS, which is still distributed with many computers today. RCS works by keeping patch sets (that is, the differences between files) in a special format on disk; it can then re-create what any file looked like at any point in time by adding up all the patches.
其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。RCS 的工作原理是在硬盘上保存补丁集 (补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
1.2. Centralized Version Control Systems (集中化的版本控制系统)
集中化的版本控制系统 (Centralized Version Control Systems,CVCS) 使得在不同系统上的开发者协同工作。
These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place.
有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
Administrators have fine-grained control over who can do what, and it’s far easier to administer a CVCS than it is to deal with local databases on every client.
每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
最显而易见的缺点是中央服务器的单点故障。如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据 (包括项目的整个变更历史),只剩下人们在各自机器上保留的单独快照。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
集中型将所有数据集存放在服务器当中,有便于管理的优点。但是一旦开发者所处的环境不能连接服务器,就无法获取最新的源代码。
1.3. Distributed Version Control Systems (分布式版本控制系统)
分布式版本控制系统 (Distributed Version Control System,DVCS),such as Git, Mercurial or Darcs,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来,包括完整的历史记录。任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
GitHub 将仓库 Fork 给了每一个用户,Fork 是将 GitHub 的某个特定仓库复制到自己的账户下。Fork 出的仓库与原仓库是两个不同的仓库,开发者可以随意编辑。
所有仓库之间都可以进行 push 和 pull。即便不通过 GitHub,开发者 A 也可以直接向开发者 B 的仓库进行 push 或 pull。
数据库 (Repository) 是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。数据库分为远程和本地两种。如果想要公开在本地数据库中修改的内容,把内容上传到远程数据库就可以了。通过远程数据库还可以取得其他人修改的内容。
Git 可以在任何时间点,把文档的状态作为更新记录保存起来。Git 管理文件,将更新的历史保存在 Git,所以不需要备份文件。
2. 换行符的处理
GitHub 中公开的代码大部分都是以 Mac 或 Linux 中的 LF (Line Feed) 换行。由于 Windows 中是以 CRLF (Carriage Return + Line Feed) 换行的,所以在非对应的编辑器中将不能正常显示。Git 可以通过设置自动转换这些换行符。
3. keyboard shortcuts
shift + / 打开键盘快捷键一览表
References
[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/
[2] 配置 Git 默认编辑器为 Vim, https://yongqiang.blog.csdn.net/article/details/130233565
[3] (日) 大塚弘记 著, 支鹏浩, 刘斌 译. GitHub 入门与实践[M]. 北京:人民邮电出版社, 2015. 1-255
[4] 为你自己学 Git, https://gitbook.tw/
[5] Git, https://git-scm.com/