《Pro Git》笔记1:起步
第一章 起步
1.关于版本控制
版本控制用于记录和追踪目录结构和文件内容变化,能够追溯过去的任何修改和变化,并恢复到任何历史状态。
版本控制系统可以按照发展过程分成以下几类:
- 目录备份。记录版本变化最简单的方法就是复制项目,根据目录名字区分不同版本或时间点。
- 本地版本控制系统。每次都备份完整的目录,在多个版本目录中就会存在很多份完全一样的冗余文件,为了解决这个问题,又出现了将不同版本的差异保存成补丁的本地版本控制系统,如比较流行rcs命令。
- 集中化的版本控制系统。本地版本控制系统还是不便于多人协同工作,集中化的版本控制系统(CVS,Subverison,Perforce等)进一步解决了这个问题。集中化版本控制系统将版本数据都保存在服务器上,参与者通过客户端连接到服务器获取版本数据或者提交修改。

- 分布式版本控制系统。集中式版本控制系统在无法通过网络连接版本库服务器的情况下,提交修改等很多功能都无法执行,中心版本库故障会影响所有参与者并且有丢失数据的风险。分布式版本控制系统(如Git,Mercurial,Bazaar,Darcs等)在客户端会保存完整的版本库备份,可以同时与多个远程版本库协作,并且除同步版本库外的所有操作都在本地执行。

2.Git的历史
2005年,Linux内核开源社区为了更好的管理Linux项目自主开发的版本控制系统。
3.Git的特点
Git的跟svn在概念上有很大的差别,相互比拟反而更容易混淆命令的实际意义。
- 直接存储文件快照(特定时间点的完整文件),而非存储差异
传统的版本控制系统通过逐行比较内容差异来确定数据是否变化,提取并保存差异。Git不关心差异,直接比较整个文件先前和此刻内容的校验值(即40位SHA1值)来确定是否修改,如果有修改会将整个文件保存到版本库数据目录中,并通过该SHA1值查找和访问版本库中的数据对象。


- 几乎所有操作都在本地执行,只有同步版本库时才需要联网。
- 天然的数据完整性校验
Git通过SHA1值索引和定位数据对象,SHA1即是数据(文件内容,目录树,提交对象等)唯一的标示和索引,也是该数据完整性校验的指纹。
- 多数操作仅添加数据
- 三个阶段和所处的三个区域
Git中记录文件变更会经历三个阶段:修改(Modified),暂存(Staged,已经加入下次提交的清单),提交(Committed,已经保存到版本数据目录)。
这三种阶段里文件数据分别存放在三个独立的区域:工作目录,暂存索引文件(.git/index),本地数据目录(.git/objects目录)。
Git工作流程可对应的分为三步:(1)修改,(2)暂存:对修改的文件作快照,并保存到暂存区,(3)提交:将暂存区的快照转存到git数据目录。

4.安装Git
Window更推荐TortoiseGit,使用起来会更方便。当然也可以用官网提供的msysGit安装包。
git官网上有针对各个平台的git程序包和GUI工具的下载和安装说明(http://git-scm.com/downloads),网上也有大量的资料。具体安装方法和过程就略过了。
5.Git配置和初始化
可以用git config命令用来设置git环境配置,也可以直接修改配置文件。git config基本格式为:
git config [--global|--system] <VAR> <VALUE>
git配置保存在3处,对应着三个级别。配置优先级为: 本项目>当前用户>系统全局
| 作用范围 | 配置文件 | git config选项 |
| 系统全局 | /etc/gitconfig windows会在git安装目录下 |
--system |
| 当前用户 | ~/.gitconfig windows在C:\Documents and Settings\$USER目录下 |
--global |
| 本项目 | 项目目录/.git/config |
无 |
查看配置信息,如果输出中有重复的变量名,那它们来自不同的配置文件,git会使用最后的那一个值。
git config --list
git config <VAR>
git每次提交版本时的提交者信息(用户名和Email)默认从配置中读取,初始化时必须要设置的。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
git在需要用户输入额外信息时,会自动调用一个文本编辑器,通过下面的命令设置这个编辑器(默认为vi,vim),这一步可略过。
$ git config --global core.editor emacs
设置git解决合并冲突时使用的差异分析工具,可以略过(默认可以用有:kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, opendiff等)。
$ git config --global merge.tool vimdiff
6.获取帮助命令
git help <verb>
git <verb> --help|-h
man git-<verb>
《Pro Git》笔记1:起步的更多相关文章
- Pro Git 第一章 起步 读书笔记
Pro Git 笔记 第1章 起步 1.文件的三种状态. 已提交:文件已经保存在本地数据库中了.(commit) 已修改:修改了某个文件,但还没有提交保存.(vim) 已暂存:已经把已修改的文件放在下 ...
- Pro Git - 笔记3
Git Branching Branches in a Nutshell Branches in a Nutshell let’s assume that you have a directory c ...
- Pro Git - 笔记2
Git Basics Getting a Git Repository Initializing a Repository in an Existing Directory For Linux: $ ...
- Pro Git - 笔记1
Getting Started About Version Control Local Version Control Systems Centralized Version Control Syst ...
- 《Pro Git》轻松学习版本控制
转自 https://kindlefere.com/post/333.html 什么是“版本控制”?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.在 ...
- 【Tools】Pro Git 一二章读书笔记
记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧. Pro Git (Scott Chacon) 读书笔记: ...
- [Git00] Pro Git 一二章读书笔记
记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧. Pro Git (Scott Chacon) 读书笔记: ...
- Pro Git 学习笔记
Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...
- 《Pro Git》笔记3:分支基本操作
<Pro Git>笔记3:Git分支基本操作 分支使多线开发和合并非常容易.Git的分支就是一个指向提交对象的可变指针,极其轻量.Git的默认分支为master. 1.Git数据存储结构和 ...
- Git Pro读书笔记
本文为Git Pro读书笔记,所有内容均来自Git Pro 1 Git基础 1.1 记录每次更新到仓库 在Git里,文件有4种状态,modified, staged, commited, 还有一种状态 ...
随机推荐
- c++ static及const(开发者在线)
static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因.作用谈起,全面分析static 修饰符的实质. static 的两大作用: 一. ...
- List、Map、Set
这样的题属于随意发挥题:这样的题比较考水平,两个方面的水平:一是要真正明白这些内容,二是要有较强的总结和表述能力.如果你明白,但表述不清楚,在别人那里则等同于不明白. 首先,List与Set具有相似性 ...
- HTML 调用iscroll.js主要事项
iscroll是一款很不错的滚动控件(js),但是在调用的时候,需要注意一些事项: 1.iscroll支持水平和垂直滚动,那么在调用的时候,一定注意滚动div必须大于父div,也就是说,父div的宽度 ...
- Spark编译安装和运行
一.环境说明 Mac OSX Java 1.7.0_71 Spark 二.编译安装 tar -zxvf spark-.tgz cd spark- ./sbt/sbt assembly ps:如果之前执 ...
- wp8 入门到精通 LINQ to SQL
http://msdn.microsoft.com/zh-cn/library/bb397924.aspx LINQ 查询操作中的类型关系 (C#) 使用一个人类发明快速检索的方法 // Northw ...
- 拼接JSONStringer出现的不正确的情况。
错误现象: 错误分析及其解答: JSONStringer可以直接嵌套JSONArray,JSONArray可以作为JSONStringer的值.我错误的原因是本质是:JSONArray存放的是JSON ...
- POJ 3461 Oulipo KMP
题意:统计其中一个子串的出现次数 题解:即KMP算法中j==m的次数 //作者:1085422276 #include <cstdio> #include <cmath> #i ...
- 手机响应式wap网页最佳方案
wap页面怎么做? 这个问题困扰了我好久,在PC上我们惯用的px单位在手机上根本不适用,即使我们写了<meta name="viewport" content="w ...
- python 添加类属性
类属性必须赋值. 创建类属性 类是模板,而实例则是根据类创建的对象. 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有 ...
- 转:EasyHook远程代码注入
EasyHook远程代码注入 最近一段时间由于使用MinHook的API挂钩不稳定,经常因为挂钩地址错误而导致宿主进程崩溃.听同事介绍了一款智能强大的挂钩引擎EasyHook.它比微软的detours ...