为什么需要版本控制?
在很久以前的人们,或者曾经不懂使用版本控制工具的你,想要保存一个项目的多个修改版本,例如一个ppt,你会像下图这么做。
这样倒是简单粗暴,但是版本多了,时间长了,我们会希望有一些便利的功能:
例如:
-
能向下图这样。只展示给你某个版本,同时可以根据从左边自由切换到右边任一版本。
- 能知道每个版本之间的区别
- 能多个人同时改一个文件(各改各得然后合并而不是前面提交的被后面提交的人覆盖)
- 能知道每次改动是谁改的在什么时候提交的
- 改错了能回退
为什么选择git来控制版本
上述的功能各种版本控制工具都有,但是git还有如下两大优点:
- 采用分布式管理模式,这点好处主要体现在以下几点:
- 安全,存放项目的机器挂了可以从任一项目成员的机器上恢复数据
- 不依赖网络,�离线也可以更改,改完了有网络再提交
- 速度快,因为大部分操作在本地
- 拥有庞大的社区,体现在:
- 户数多,大家都用这个工具交流起来多方便
- 拥有诸多安全可靠的代码托管商
- 大量开源项目
git的诞生
这个历史就说来话长了!!
在很久很久以前,你拥有我,我拥有你,哦呸!
在很久很久以前,git的诞生是因为linux的作者linus觉得当时的版本控制工具太烂,想制作一个拥有上述功能的工具来管理linux的各种内核版本,然后就搞了个git出来。
好吧,历史我讲完了,我就知道这么多。
git的基本思想
接下来我的这段话非常重要,如果看这篇文章的你是个初学者曾经在网上各种学习git搞得摸不着头脑,我保证以下内容会让你打通任督二脉。
接下来我不是告诉你命令怎么用,而是把git的思想说清楚。
- 团队某一成员把项目用git管理起来,并push到服务器建立项目数据库。可以自己搭建服务器也可以使用项目托管服务。
- 团队其它成员可以从服务器clone项目,将得到完整信息的镜像。注意是完整信息,包括所有版本和提交记录和项目配置。分布式就体现在这里,即使服务器被火烧了,也能从任何一个镜像得到完整数据。
- clone克隆下来之后会在本地镜像一个和远程数据库一模一样的本地数据库。以后简称为远程库和本地库。
- �功能一般通过创建分支来添加,版本是相对于分支来说的。例如做了一个app,想创建一个特别针对平板优化的分支。然后这个分支又迭代了很多次,每一次都是一个版本。
- 通常有一个主分支,一般叫master。从远程clone下来你看到,咦,只有一个版本啊。因为只显示一个分支,默认主分支。你可以自由切换到其它分支,从哪获取?从本地库,强调下,你clone下来的本地库有完整的项目信息。
- 项目的文件根据有没有被git跟踪分为未跟踪和已跟踪两个状态。你刚创建的文件属于没有被git跟踪的状态,可以自己告诉git跟踪起来。这样git会把它加入下次要提交的内容内,同时监控这个文件是否被修改。
- git分四个区,工作目录,暂存区,本地库和远程库。本地库和远程库刚说了。至于工作目录和暂存区,看下一条。
- 首先工作目录就是你正在改来改去的那个目录呗。而暂存区是所有被git跟踪的文件的某个状态。很难懂是不是?例如你clone下来的项目只有a文件,当然a文件是已经被git跟踪的了,这个时候暂存区也只有a文件。你又添加了一个b文件,这个时候b是还没被跟踪的要自己通知git跟踪它。跟踪后暂存区就有a和b两个文件。这个时候工作目录和暂存区有区别吗?没有。然后你又改了a文件,这个时候工作目录和暂存区有区别吗?有的,都有a和b两个文件,但是两个a不一样。为什么要有暂存区?看下一条。
- git提交修改的内容来自哪?来自暂存区。提交到哪?提交到本地库。你改改改,最后提交到本地库后就大功告成了吗?还没,得推送你的分支到远程库别人才看得到啊。
- 另外还有一个概念是fork,这个其实算项目托管的概念。就是你可以在项目托管平台fork别人公开的项目。fork后会发生什么事情?就是你自己的项目目录里有一个一模一样的链接。还不理解吗?网盘会用吧,fork就和“保存到我的网盘”是一样的。
看了这些你应该知道什么是分布式(完整镜像),为什么不依赖网络和速度快(绝大多数操作在本地)。
网友评论