progit 之 git 起步(1)

摘要:
Git不会以上述方式处理或保存数据。相反,Git更像是将数据视为小型文件系统的一组快照。Git保证Git中所有数据的完整性。在存储之前,将计算校验和,然后将其作为校验和引用。这意味着不可能在Git不知情的情况下更改任何文件或目录内容。然而,所有Git命令只能在命令行模式下执行,大多数GUI软件仅实现所有Git函数的子集,以降低操作难度。在安装Git并首次运行Git之前,Git附带了一个gitconfig工具,用于帮助设置控制Git外观和行为的配置变量。

了解git为什么这么流行,为什么应该使用git 以及 如何设置及使用git

关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。有了它就可以将文件回溯到之前的状态,甚至将整个项目都回溯到过去某个时间点的状态。

本地版本控制系统

许多人习惯用复制的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做的唯一好处是简单,但是很容易犯错。为了解决这个问题,人们很久以前就开发了许多本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

其中最流行的一种是RCS,他的工作原理是在硬盘上保存补丁集(补丁是指文件修改前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)

主要解决问题:如何让不同系统上的开发者协同工作

原理:CVS、Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本。而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。

好处:每个人都可以在一定程度上看到项目中的其他人正在做些什么,而管理员也可以轻松掌握每个开发者的权限,并且管理一个CVCS要远比在各个客户端上维护本地数据库来的轻松容易。

坏处:最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么这一小时内,谁都无法提交更新,也就无法协同工作;

如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据 —— 包括整个项目的变更历史,只剩下人们在各个机器上保留的单独快照。

本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统(Distributed Version Control System,简称DVCS)

原理:如 Git、Mercurial、Bazaar、Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。progit 之 git 起步(1)第1张

Git简史

直接记录快照,而非差异比较

Git和其他版本控制系统的主要差别在于Git对待数据的方法。

概念上来区分,其他大部分系统以文件变更列表的方式存储信息。存储每个文件与初始版本的差异。Git不按照以上方式对待或保存数据,反之,Git更像是把数据看作是对小型文件系统的一组快照。每次你提交更新或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个数据流。

近乎所有操作都是本地执行

在Git中绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其他计算机的信息。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

Git保证完整性

Git中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不知情时更改任何文件内容或目录内容。若你在传送过程中丢失信息或损坏文件,Git就能发现。

Git用以计算校验和的机制叫做SHA-1散列(hash,哈希)。这是一个由40个十六进制字符组成的字符串,基于Git中文件的内容或目录结构计算出来。

实际上,Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

Git一般只添加数据

你执行的Git操作,几乎只往Git数据库中增加数据。很难让Git执行任何不可逆操作,或者让它以任何方式清除数据

三种状态

Git有三种状态:已提交(committed)、已修改(modified)、已暂存(staged)。

已提交表示数据已经安全的保存在本地数据库中;已修改表示修改了文件,但还没保存到数据库中;已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入Git项目的三个工作区域的概念:Git仓库、工作目录以及暂存区域

progit 之 git 起步(1)第2张

Git仓库目录:是Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其他计算机克隆仓库时,拷贝的就是这里的数据。

工作目录:是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库提取出来的文件,放在磁盘上供你使用或修改。

暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作索引,不过一般说法还是叫暂存区域。

基本的Git工作流程如下:

1. 在工作目录中修改文件

2. 暂存文件,将文件的快照放入暂存区域

3. 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录

如果Git目录中保存着特定版本的文件,就属于已提交状态。如果做了修改并已放入暂存区域,就属于已暂存区状态。如果自上次取出后,做了修改但还没有放到暂存区域,就是已修改状态。

命令行

Git有多种使用方式,可以使用原生的命令行方式,也可以使用GUI模式。但是只有在命令行模式下才能执行Git的所有命令,而大多数GUI软件只实现了Git所有功能的一个子集以降低操作难度。

安装Git

初次运行Git前的配置

Git自带一个git config的工具来帮助设置控制Git外观和行为的配置变量。这些变量存储在三个不同的位置:

1. /etc/gitconfig文件:包含系统上每一个用户及他们仓库的通用配置。如果使用带有 --system选项的git config时,他会从此文件读写配置变量。

2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。可以传递 --global 选项让Git读写此文件

3. 当前使用仓库的Git目录中的config文件,就是 .git/config:针对该仓库

每一个级别覆盖上一级别的配置,所以.git/config 的配置变量会覆盖/etc/gitconfig中的配置变量

用户信息

设置你的用户名称与邮件地址,每一次的Git提交都会使用这些信息,并且他会写入到你的每一次提交中,不可更改:

git config --global user.name "John Doe"git config --global user.email johndoe@example.com

当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有--global选项的命令来配置。

文本编辑器

如果未配置,Git会使用操作系统默认的文本编辑器,通常是Vim。如果想使用不同的文本编辑器,例如Emacs。

git config --global core.editor emacs

检查配置信息

git config --list
git config user.name

获取帮助

git help <verb>git <verb> --help
man git-<verb>

免责声明:文章转载自《progit 之 git 起步(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS3之边框图片border-image淘宝NPM源的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server中的事务日志管理(3/9):事务日志,备份与恢复

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有正确的备份。当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时。这系列文章会告诉你每个DBA应该知道的具体细节。 它不会经常提起,除非你的数据库运行在简单(SIMPLE)恢复模式,在事务日志上定期备份非常重要的。这会控制事务日志大小...

在重命名SqlServer数据库时,报5030错误的解决办法

数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use master select spid from master.dbo.sysprocesses where dbid=db_id('数据库原名') 执行下面这条语句杀掉连接进程就OK了 use master kill 54...

认识solr结构,了解核心的文件目录

下载solr并解压后,发现solr的目录里有很多的东西,此时我们可能会感到很恐慌,不知如何下手,下面让我带你认识它。 1、解压后的solr目录结构如下: 虽然里面有很多的文件,但是我们需要的其实就两个,如上图画有红框的文件solr和webapps,其他的文件你可以先忽略它,有兴趣可以看看《五分钟solr教程》。 2、部署到tomcat 根据《solr部署...

(02)mongodb 数据库与collection的基本操作

1、查询数据库。 show dbs;或者show databases; 2、创建数据库,必须创建collection,如果只有use shop; 不会创建数据库。 use shop; db.createCollection('goods'); 3、删除数据库。 use shop; db.dropDatabase(); 4、查询collection,先用us...

Sqli-labs 学前准备 搭建SQL注入平台

sqli-labs是一款学习sql注入的开源平台,共有75种不同类型的注入。 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:https://pan.baidu.com/s/1HY0hFnj6ywKjwHhB1vlOfg 解压密码:ms08067.com 双击安装即可 2.从github上(https://github.com/Audi-...

jmeter环境搭建

1.JMeter 介绍      Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,...