GIT学习笔记-1

Mariot Tsitoara 《Beginning Git and GitHub》2020  四个部分,共19章

第一部分 Part I Vision Control with Git 通过Git进行版本控制

Chapter1:阐述版本控制系统的需求;解决这些需求的基本理念;历史上各种版本控制方案和系统;为什么还要开发Git?;Git的理念是什么?有什么过人之处?

Chapter2:Installing and Setup Git

Chapter3:开始使用Git,学了这部分就能掌握Git的基本使用,可以尝试在工作中使用Git了

Chapter4:Diving into Git 进一步深入Git,掌握使用日志,查看以前的版本,查看当前的改变

Chapter5:Commits,详细讨论提交:Git的三个状态;在不同的版本中游历;Undo撤销一个提交;如何修改提交,修正提交;

Chapter6:GIt最佳实践:读完这章,你就可以在实践中使用GIT了,新手阶段完成了

Chapter7:远程Git:为什么要远程工作?如何远程工作?

学习方法:边用边学

Chapter1:版本控制系统介绍 Version Control Systems

1. 什么是版本控制?

小王正在追一个女孩,新肺炎疫情期间,见不了面,写封情书表达心声,写情书的过程中出现了形成了好几个版本:

这是版本管理的原始的方式,显然很快就会记不清楚“谁是谁”,搞不清楚它们之间的区别是什么。于是小王做了一个改进,单独创建一个文件history.txt,里面标记了每个版本的时间以及版本描述

作为手工版本管理,能做到这样已经相当不错了,但是对软件项目开发,还有很多不足之处:如何方便地比较各个版本的内容?新增加了一个开发人员怎么办?能否方便地撤回一次更新?能否方便地回滚到以前的某个版本?... 因此,对软件开发,必须用一个软件系统来实现方便的管理,这种系统被称为: Version Control System (简称VCS)

2. 版本控制系统的种类

版本控制系统是用来管理一个工程的多个版本的软件系统,管理工程中的任何一个文件的改变(增加、删除、编辑),能够方便的追溯,而且对文件的改变进行撤销和回滚,总之,版本控制系统可以帮助我们在更改之间导航,并在出现问题时快速返回到以前的版本。

(1)本地版本控制系统 (Local Version Control Systems)
是第一代VCS,所有数据保存在本地计算机中. 上个世纪70年代流行的由AT&T开发的SCCS(Source Code Control System),是典型的第一代VCS,它不是开源的。1982年发布的开源RCS(Revision Control System),替代了SCCS,因为RCS是开源的、跨平台的,而且更加有效。第一代VCS的共同缺点是:同一个时间只工作在同一个文件上,没有办法跟踪整个项目。

(2)集中式VCS(Centralized Version Control Systems)
是第二代VCS,集中式VCS把数据集中存储在一个服务器上,开发者可以通过特定的客户端软件连接服务器。显然,项目管理是依赖于服务器中的中心仓库,所有更改必须要提交到那里。第二代VCS支持团队工作,但主要问题是一个文件被某个人锁住以后,团队的其他人将无法再更改它,单点故障也是显然的,如果服务器坏掉了,那么所有的开发者就只能干瞪眼了。主要代表有 CVS、SourceSafe、Subversion、Team Foundation Server、SVK。

其中,CVS(Concurrent Versions System,CVS)是最初的第二代版本控制系统,开源的。大约十年间,它是最为流行的版本控制系统,直到 2000 年被 SVN(Subversion的缩写) 所取代。关于 CVS 的使用可以参考这篇文章:https://zhuanlan.zhihu.com/p/51792519
SVN(Subversion 的缩写),开源的,相较于CVS,它采用了分支管理。SVN 是 Apache 软件基金会的一个顶级项目。项目地址:https://subversion.apache.org/。TortoiseSVN是一款常用的 SVN 客户端图形化开源软件,在 Windows 上非常受欢迎,它与资源管理器集成得相当不错,可以透过资源管理器在文件或目录上用鼠标右键的菜单完成 SVN 的操作。官方网站:http://tortoisesvn.net/。

(3)分布式VCS(Distributed Version Control Systems)
分布式VCS在每个使用者电脑上就有一个完整的私有数据仓库,没有网络依然可以使用, 也可以有个服务器端的仓库,用来同步各开发者的私有仓库。分布式VCS很好的支持了开源社区中的“forking”理念:贡献的代码可以被集成,而不需要所有人都能push代码到仅有的中央仓库中,开发者push到自己的服务端仓库,而只有项目维护者才能push到正式仓库。开发者可以从其他开发者仓库(而不仅仅是中央仓库)中pull改变的代码到本地。这样项目维护者可以接受任何开发者的提交,但无需给他正式代码库的写权限。效果就是一个分布式的工作流,能为大型、自发性的团队(包括了不受信的第三方)提供灵活的方式来安全的协作。也让这个工作流成为开源项目的理想工作流。分布式VCS运行速度快,大部分时间不需要访问网络,几乎所有工作都是在本地完成。第三代版本控制系统主要有 Bazaar、Git、Mercurial、BitKeeper、Monotone。

值得一提的是BitKeeper,由BitMover 公司开发,是最初的分布式源代码控制系统之一,非开源。BitMover 公司 CEO Larry McVoy 与Linux之父 Linus 是好友, Larry 说服 Linus 2002年在内核开发中使用 BitKeeper。然而 BitKeeper 在免费使用的许可证中加入很多限制条件,逐渐惹恼了内核开发者,最终促使 Linus 2005年开发出了毁灭 BitMover的 Git。2016 年 5 月 11 日,BitKeeper 宣布以 Apache 2.0 许可证开源。

3. What is Git

首先,Git有强大的功能:方便地在版本之间游弋;方便地查看版本之间的差异;方便地检查一个文件的历史;给感觉重要的版本做特殊标记(方便参考);不同的开发者之间交换“改变”;查看其他开发者的改动等等。值得特别指出的是,尽管branching(分支系统)是一个老的概念,但Git的branching系统快速而且高效!

以下是本书要学习的命令,看上去简洁而且容易理解

$ git init     # Initialize a new git database
$ git clone    # Copy an existing database
$ git status   # Check the status of the local project
$ git diff     # Review the changes done to the project
$ git add     # Tell Git to track a changedfile
$ git commit   # Save the current state of the project todatabase
$ git push     # Copy the local database to a remoteserver
$ git pull     # Copy a remote database to a localmachine
$ git log      # Check the history of the project
$ git branch   # List, create or delete branches
$ git merge    # Merge the history of two branchestogether
$ git stash    # Keep the current changes stashed away tobe used later

How does Git work?

你可能感兴趣的:(GIT学习笔记-1)