学习Git(一)起步
什么是Git
在Git官网上找到这样一段描述
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
重点是 version control system
(VCS),翻译过来也就是 版本控制系统
。(Pycharm中有一个)
关于版本控制
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
(我的理解就是一个东西会有不同的版本,就像吃鸡,常常更新,每更新一次就是一个新的版本,如果刚发行的版本出现毒圈不掉血,这个时候就需要版本回退。。版本控制系统就体现作用了)
版本控制系统又分为:本地版本控制系统、集中化的版本控制系统、分布式版本控制系统。
本地版本控制系统
集中化的版本控制系统
分布式版本控制系统
更多介绍可以来看 1.1 起步 - 关于版本控制
谁开发了 Git
2002 年,Linux 内核开源项目组开始启用一个专有的分布式版本控制系统 BitKeeper
来管理和维护代码。
但是到了 2005 年,开发 BitKeeper
的商业公司同 Linux
内核开源社区的合作关系结束,他们收回了 Linux
内核社区免费使用 BitKeeper
的权力。 这就迫使 Linux
开源社区(特别是 Linux
的缔造者 Linus Torvalds
)基于使用 BitKeeper
时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Git 特点
Git 工作流
基本的 Git 工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
近乎所有操作都是本地执行
在 Git
中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
举个例子,要浏览项目的历史,Git
不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。 如果你想查看当前版本与一个月前的版本之间引入的修改,Git
会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。
Git 保证完整性
Git
中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git
不知情时更改任何文件内容或目录内容。 这个功能建构在Git
底层,是构成 Git
哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git
就能发现。
Git
用以计算校验和的机制叫做 SHA-1
散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git
中文件的内容或目录结构计算出来。 SHA-1
哈希看起来是这样:
24b9da6552252987aa493b52f8696cd6d3b00373
Git
中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git
数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
Git 一般只添加数据
你执行的 Git
操作,几乎只往 Git
数据库中增加数据。 很难让 Git
执行任何不可逆操作,或者让它以任何方式清除数据。 同别的 VCS
一样,未提交更新时有可能丢失或弄乱修改的内容;但是一旦你提交快照到 Git
中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。
Git 的三种状态
- 已提交(committed):数据已经安全的保存在本地数据库中。
- 已修改(modified) :修改了文件,但还没保存到数据库中。
- 已暂存(staged) :对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
安装 Git
说了那么多,现在开始动手,安装Git。
Linux
$ sudo yum install git
或者
$ sudo apt-get install git
Mac
下载安装包 Downloading Git
或者
$ brew install git
Windows
直接下载文件 Downloading Git
或者
安装 GitHub for Windows
初次运行 Git 前的配置
用户信息
$ git config --global user.name "name"
$ git config --global user.email example@example.com
如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git
都会使用那些信息。
检查配置信息
$ git config --list
user.name=name
user.email=example@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
获取帮助
若你使用 Git
时需要获取帮助,有三种方法可以找到 Git
命令的使用手册:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
例如,要想获得 config
命令的手册,执行
$ git help config
总结
以前只是了解 Git
常见的push、commit等命令,从没有对 Git
进性过系统学习,抓紧时间学习。
目标:两周后,也就是3月28日,能熟练使用 Git
进性开发。
这一篇主要讲了些背景知识吧,下一篇就是实际的操作了。
主要从Git文档上截取自己认为重要的部分,有条件可以去仔细阅读。
- JavaScript之arguements对象学习
- 让我们一起写出更有效的CSharp代码吧,少年们!
- SQL学习之计算字段的用法与解析
- JavaScript之JS的执行环境和作用域
- GOF设计模式快速学习
- JavaScript之面向对象学习一
- JavaScript之JS实现动画效果
- 深入入门系列--Data Structure--04树
- SQL学习之高级联结(自联结、自然联结、外联接)
- ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
- JavaScript之面向对象的概念,对象属性和对象属性的特性简介
- 快速入门系列--WebAPI--04在老版本MVC4下的调整
- SQL学习之SELECT子句顺序
- [图解]sqlserver中创建链接服务器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
- python3用ARIMA模型进行时间序列预测
- R语言马尔可夫转换模型研究交通伤亡人数事故预测
- scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘
- 使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析
- R语言中的马尔科夫机制转换(Markov regime switching)模型
- R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
- nginx快速入门
- R语言中进行期权定价的Heston模型
- 使用R语言随机波动模型SV处理时间序列中的随机波动率
- 20个ES6面试高频问题
- i++和++i傻傻分不清楚?这里给你最清楚的解答
- android APT 使用
- Flutter异步编程async与await的基本使用
- 教大家一个万能PPT图片排版技巧,太赞了!