为什么需要版本控制?
你是否曾为误删重要文件而懊悔,你是否曾为数据丢失而苦恼?你是否曾错误改动文件而无法更正?
你丢失的或许是几日的心血,或许是照片中美好的回忆。但对于一个项目而言,任何文件的丢失与错误的修改都可能是致命。
版本控制就如同游戏中的存档,是开发中的后悔药。
我想有的人曾因担心之后的操作把已有的工作搞砸,提前复制或者备份一份已有的文件,然后再进行不太确定的操作。
很多软件为用户提供了撤销的功能,从某种层面上说,这也是一种版本控制,你能想象如Word、PowerPoint、PhotoShop等大型软件不提供撤销功能会造成多么大的不便吗?
当然,版本控制也绝非一个撤销键这样简单。
通常来说,大多数软件提供的撤销功能是有很多不足的:
(1)无法直接撤销至任意一步,只能逐步撤销。
(2)无法撤销至这次打开软件之前的版本,撤销的步数受限。
(3)不能保存撤销和重做的记录。
(4)撤销后的修改会影响撤销,无法保留现有修改的同时撤销过去的修改。
为什么选择Git?
(1)Git 是基于GPLv2的自由软件(free software)(Git 的部分内容不是基于GPLv2的,但是也基于一个与GPLv2兼容的协议),是软件自由保护组织(Software Freedom Conservancy)的子项目。
(2)Git是Linus Torvalds为维护Linux Kernel设计的工具。
Git本就是为程序开发设计的版本控制系统,比其他的版本控制系统更适合程序开发的需求。
除此之外,Git 还拥有这些特点:
(1)速度快
(2)简单的设计
(3)对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
(4)完全分布式
(5)有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Git 的历史
Linux内核开源项目有着为数众多的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。[2]
因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux内核的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。[3]
Git基础
![3b066d8a52277c523602ea75f8baf99d.png](https://i-blog.csdnimg.cn/blog_migrate/d0697d80d7d144ab4412028fd8abadd2.png)
Git有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。[13]
![25f3952bf2f21f037bb1080f7a366f20.png](https://i-blog.csdnimg.cn/blog_migrate/d7a6af67a876a51a40aa7e687f7c4f54.png)
(1)init
为了在没有使用过Git的项目中使用Git,首先需要完成初始化Git仓库,在终端内,将工作目录切换至项目的目录,便可使用git init命令完成对Git仓库的初始化。
(2)clone
任何人都可以从Github或者其他平台上获取使用Git版本控制的项目。只需要使用git clone 就可以完整的获取url所对应的项目的所有源码以及所有的改动历史。
(3)status
使用git status能查看git仓库的修改状态。
(4)log
使用git log能查看git仓库的日志。日志中包括了很多信息。
(5)diff
该命令会显示Git仓库中和上次提交相比已被修改的文件。
(6)add
![a380ff90f627a8dfcbfc7be5abff2269.png](https://i-blog.csdnimg.cn/blog_migrate/ddc42c686ede55ea9fc20de6cab3e214.png)
(7)commit
git commit命令用来提交已经暂存的更改。参数 -m message 附加提交信息,参数 -S 在提交中,使用GnuPG签名。
作者
文章转自:小组20级成员--赵子玮