第一章 起步

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>

最新文章

  1. 蓄水池(Reservoir_sampling)抽样算法简记
  2. 输入url到页面返回的过程
  3. 网络流量监控工具----iftop
  4. 越狱Season 1-Episode 7: Riots, Drills and the Devil: Part 2
  5. hdu 3282 Running Median
  6. 【WinForm】“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常,无法识别的配置节 system.serviceModel
  7. 重写String类,也有些区别,供参考
  8. input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
  9. 【转】 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
  10. 安装Dubbo注册中心(Zookeeper-3.4.6)
  11. 【D3】transition API
  12. 二十六、Hadoop学习笔记————Hadoop Yarn的简介复习
  13. Python统计excel表格中文本的词频,生成词云图片
  14. MySQL 5.6 以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
  15. MyBatis-resultType 几种返回类型
  16. python argparse(参数解析)模块学习(一)
  17. java web 使用maven打包绕过单元测试
  18. OCM_第三天课程:Section1 &mdash;》表空间的操作和管理、服务配置
  19. SQL Server 中为何拥有db_owner权限的账号删除不掉数据库
  20. javascript奇技淫巧之位运算符

热门文章

  1. 一、HTML和CSS基础--网页布局--网页简单布局之结构与表现原则
  2. Rap 安装和配置
  3. Webloigic监控
  4. ytu 1940:Palindromes _easy version(水题)
  5. SQL Server:在事务中回滚TRUNCATE操作
  6. 【HTML5】拖放(Drag 和 drop)
  7. Win7-64bit系统下安装mysql的ODBC驱动
  8. json学习系列(2)-生成JSONObject的方法
  9. UVa10917 A Walk Through the Forest(SPFA+记忆化搜索)
  10. BZOJ1807 : [Ioi2007]Pairs 彼此能听得见的动物对数