参考网站:https://git-scm.com/book/zh/v2/
1.版本控制简介
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统,在版本控制发展的历史中,首先出现的是本地版本控制。顾名思义,就是将每次版本的更新都记录到本地,但不能在不同设备之间进行版本控制管理。于是,出现了集中式版本控制系统,比如之前常用的SVN,集中式版本控制系统(Centralized Version Control Systems,简称 CVCS)有如下特点:
1.有一个服务器,用来保存所有文件的修改记录。
2.其他设备连接到这个服务器,来提交或更新最新的版本。
集中式版本控制系统相对于本地本地版本控制系统,有不少的优点,然而,缺点也很明显:
1.必须联网才能工作,否则下载代码/提交代码无法完成;
2.安全性低,服务器只有一个,如果发生宕机或损坏,数据就不能找回了。
于是,就出现了分布式版本控制系统(Distributed Version Control System,简称 DVCS),最常用的就是Git了。
分布式版本控制系统不的设计理念和集中式版本控制系统有很大的差别,在分布式版本控制系统中,客户端不止是提取服务器上的文件,而是将整个服务器上代码仓库的镜像克隆到了本地,这样一来,每个客户端就相当于一个服务器,任何一个服务器发生故障,都可以通过其他客户端来恢复数据,因此,保证了数据的安全性。此外,由于每个客户端都克隆了代码仓库的镜像,因此,可以在没有网络的情况下进行文件的提交(提交到本地的代码仓库中),网络恢复后再上传到服务器即可。
这点对于习惯用SVN的用户来说(比如我),比较难理解,在SVN中,
svn commit
之后就提交到了服务器中,而当使用git提交时,git commit
之后时提交到了本地的数据库中,和远程的服务器没一点关系,只有git push
之后,才会真正的提交到远程服务器。
2.Git简介
Git是一种分布式版本控制系统,由linux之父 Linus Torvalds为了给Linux内核开源项目提供一个高效强大的分布式版本控制工具开发而成。
Git工作原理
Git 和其它版本控制系统的主要差别在于 Git 对待数据的方法。 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。 这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流。
Git三种状态
- 已修改:说明文件被修改了;
- 已暂存:说明对一个已修改文件的当前版本做了标记;
- 已提交:说明被修改的文件已经被提交到本地数据库了
这三种状态分别对应三个区域:
- 工作目录:从服务器提取下的内容
- 暂存区:一个文件,保存了下次将提交的文件列表信息。
- Git仓库:是 Git 用来保存项目的元数据和对象数据库的地方,这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
Git工作流程
- 1.在工作目录中进行文件的操作,如代码的修改、删除…
- 2.将修改的内容放到暂存区中,准备进行提交(git add);
- 3.将暂存区中的文件提交到本地数据库中(git commit);
- 4.(可选)上传到远程服务器(git push)
3.Git的安装(Linux)
在Ubuntu上安装Git之前首先,执行该命令查看是否安装git:
Ubuntu@ubuntu:~$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
如果是上面所示例,则说明已安装,如果不是,对于Debian的版本,使用如下命令进行安装:
sudo apt-get install git
对于早期版本的debian系统,需要执行
sudo apt-get install git-core
,这是因为之前有个软件也叫git(GNU Interactive Tools),因此避免混淆,在后面加了core;后来的版本中gun I T改名位gnuit了,git安装就变成了现在的命令;
如果是其他Linux版本,请参考 http://git-scm.com/download/linux.
4.创建Git仓库
Git仓库,又称版本库,只有版本库中的文件才能被Git进行管理。有两种方式可以创建一个Git 仓库:
- 1.在本地创建一个新的并且没有在git控制下的仓库.创建一个版本库非常简单,首先创建一个新目录,
mkdir MyRepository
cd MyRepository
执行git init
命令就会创建:
Ubuntu@ubuntu:~/workspace/test$ git init
Initialized empty Git repository in /home/Ubuntu/workspace/test/.git/
Ubuntu@ubun