git起步
关于版本控制
什么是版本控制?为什么要版本控制?
版本控制是记录文件内容变化,以便在将来查阅特定版本的系统.有了版本控制,我们就可以将某个文件或是整个项目回退到之前的某个时间段,查看现在和之前相比项目所有的变化,甚至比较文件的变化细节.
本地版本控制
最简单的版本控制就是本地版本控制,我们可以复制一份当前的工作,并在备份上修改做增添新的内容.对单个或几个文件来说这样做是很简单的,但对大的项目就无能为力了.

还有一种流行的一种叫做 rcs,现今许多计算机系统上都还看得到它的踪影。甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。
集中化的版本控制系统
本地版本控制最大的问题就是不能多开发者协作.于是有个集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS ),例如CVS.
所有人的工作都上传到服务器,服务器保存版本更改,而人们同样通过下载来获取最新的更新.

这样做最大的问题是,所有的数据,历史记录都只保存在中央服务器上,如果中央服务器出问题,人们就没法上传下载,即便客户端有当前最新项目的备份,历史更新记录也会丢失.
分布式版本控制系统
为了解决上面提到的问题,人们又发明了分布式版本控制系统(Distributed Version Control System,简称 DVCS).例如Git,客户端并不只是提取最新版本的文件,而是完成的镜像代码仓库.这样一来,客户端和服务器只是担任的功能不同,保存的文件是完全一样的,如果服务器出现故障,客户端仍保存完整的文件和历史记录.

Git基础知识
Git和其他版本控制系统的差别
传统的CVS的版本控制系统每次更新时会记录哪些文件做了更新,以及更新了什么内容,如下图:

而Git并不会保存差异数据(Δ),而是直接记录文件的快照.当提交更新时,Git会总览所有文件的指纹信息,如果文件有更新就会做一个快照并保存一个指向快照的索引,因此Git更像一个微型的文件系统.为了提高性能,若文件没有变化,Git不会再次保存而是做一个对上次保存的快照的链接.如下图:

近乎所有操作都在本地执行
由于Git在本地保存了完整的仓库,因此Git中的大多数操作都是无需联网的,除非你需要多人合作,而CVCS差不多所有的操作都需要连接互联网,因此你必须把自己的改变上传到云端。因此Git会比CVCS快很多。
举个例子,如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。
用Git你可以在没有网络的时候提交更新,等到了有网络的时候再上传到远程仓库,换做其他版本控制系统,这几乎是不可能的。
保持数据完整性
在保存到Git之前,所有的数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的 唯一标识 和索引。这项特性作为Git的设计哲学,建在整体架构的最底层。因此Git可以非常容易的发现文件传输时的不完整或是磁盘损坏导致的文件数据缺失。
Git使用SHA-1算法计算数据的校验和,通过对文件的内容或目录结构计算出一个哈希值,由40位16进制字符组成,看起来就是:
24b9da6552252987aa493b52f8696cd6d3b00373
Git的工作完全依赖这类指纹字串。实际上,所有保存在Git数据库中的东西都是以哈希值来索引的,而不是文件名。
文件的三种状态
对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged).
已修改 表示文件已被修改,但还没有提交保存;
已暂存 表示已将修改后的文件放在待提交的清单中;
已提交 表示文件已被安全的保存在本地数据库中了;
下图从左到右标识了文件流转的三个区域:工作目录、暂存区、Git仓库目录

每个项目都有一个Git目录,通常是.git目录,它是保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
从项目中取出某个版本的所有文件和目录,用以开始后续的工作的叫做工作目录。实际上是从.git目录的压缩对象数据库中提取出来的。
暂存区只是一个简单的文件,一般存放在Git目录中,有时候人们也叫它索引文件。
初次运行Git前的配置
环境变量位置
Git提供了git config命令来配置和读取相应的工作环境变量,Git中的变量可以存取在以下三个不同的地方。
/etc/gitconfig文件:对所有用户都生效的配置,在使用git config时用--system选项,读写的就是这个文件。~/.gitconfig文件:只对当前用户生效,在使用git config时用--global选项,读写的就是这个文件。- 工作目录中的
git/config文件:仅对当前项目生效。每一个级别的配置都会覆盖上层相同的配置,所以.git/config里的配置会覆盖系统和用户配置文件中的同名变量。
用户信息
使用Git首先要配置的就是你的用户名和电子邮件地址。
git config --global user.name lepecoder
git config --global user.email example@exalple.com
默认文本编辑器
Git有时需要你输入一些额外的信息,这时就会调用外部编辑器,一般是vi或vim,如果有特殊的需求,也可以自己设定:
git config --global core.editor emacs
指定差异分析工具
可以指定在合并冲突时使用哪种差异分析工具,Git可以理解kdiff3,tkdiff,meldm,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,opendiff等,比如我们要改用vimdiff。
git config --global merge.tool vimdiff
查看配置信息
可以使用git config --list命令查看配置信息,如果有重复的变量名,表示他们来自不同的配置文件,Git实际使用时会采用最后一个。
$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
.....
也可以直接看某个变量的值
$ git config user.name
lepecoder
基本的Git工作流程是
- 在工作目录中修改某些文件。
- 对修改后的文件进行快照,保存到暂存区。
- 提交更新,将暂存区的快照永久转储到Git目录中。
参考资料https://www.gitbook.com/book/0532/progit/details
git起步的更多相关文章
- (三)Java工程化--Git起步
GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...
- 【转】Git详解之一:Git起步
原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后 ...
- Git详解之一 Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git详解之一:Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git 学习之git 起步(一)
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git起步--git安装与初次运行git前配置
在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安 ...
- 让你不再纠结GitHub:Git起步
一.关于版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.我们通常仅对保存着软件源代码的文本文件做版本控制,但实际上,你可以对任何类型的文件进行版本控制. 采用版本控制 ...
- 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程
1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...
- Git学习1:Git起步
本系列文章部分原理和命令相关内容是从 https://git-scm.com/book/zh/v2 摘录,软件实际使用是总结自己的实践经验成文. 1. 关于版本控制 版本控制是一种记录一个或若干文件内 ...
随机推荐
- LCA&最小生成树
LCA 经常被用来使用.比如询问树两点之间的距离. 比如树上差分 都是经常被使用的类型.有的时候倍增求LCA的同时还可以优化算法. 这道题呢 求一个严格的最小生成树,当然如果不严格的话如果有重边那么就 ...
- TableView刷新跳动问题
https://juejin.im/post/5aca1a04f265da2391486533 解决办法: 将估算高度设置为0即可: tableView.estimatedRowHeight = 0; ...
- LeetCode 973 K Closest Points to Origin 解题报告
题目要求 We have a list of points on the plane. Find the K closest points to the origin (0, 0). (Here, ...
- 《Nginx - 指令》- Rewrite/If/Set
一:Rewrite - 概述 - flag 作用 - last / break 实现对 Url 的重写. - redirect / permanent 实现对 Url 的重定向. - 使用范围 - s ...
- ab压力测试工具的使用
一.下载稳定版2.2.31 http://httpd.apache.org/ 二.2.2.*和2.4.*区别? httpd-2.2.x(prefork) httpd-2.4.x(event) 编 ...
- Linux忘记密码常用的几种解决方法
原文链接:https://www.cnblogs.com/vurtne-lu/p/6550590.html 一. lilo引导1. 在出现 lilo: 提示时键入 linux single Boot: ...
- 程序------>数据结构
一程序概念: 1.对身边的任何一个事物进行认知和分类,从而得到一些信息: 2.在得到的信息基础之上建立了概念模型: 3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式: 4.用户通过人机交 ...
- 安装MongoDB报错
尝试多次,最后找到解决方式: 在安装的最后一步的时候不要勾选左下角的compass即可 命令行mongod --version测试安装是否成功
- oc初步画图
- (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextMoveT ...
- mysql常用压测工具
关键字:mysql压测工具 mysqlslap.sysbench 基准测试sysbench 压力测试 tpcc 具体怎么使用百度