[git] git 的基本认知
版本管理 ( Version Control )
版本管理系统是一个记录文件变更的系统,让你在一段时间后可以恢复指定版本的文件。版本管理系统大致可分为三类:独立的本地版本管理系统、中心化版本管理系统、分布式版本管理系统。
本地版本管理系统
最简单的方式,就是手动备份文件,实现文件版本管理的效果。以前一个相对流行的工具是 RCS ,逻辑关系如下图

中心化版本管理系统( Centralized Version Control System )
例如 CVS, subversion, perforce 等,有一个服务器包含了所有版本的文件,同时多个客户端从那个远程的服务器中拷贝出文件。这个场景下的拷贝动作,叫做签出( Checkout )。很多年来,这种方式是版本管理的标准方案。
中心化的最大缺点是单点故障。当中心的版本控制服务器处于事故状态,一段时间内不可使用,则这段时间内无法基于版本控制的合作。如果版本服务器的硬盘坏掉,并且没有及时的备份,则所有历史数据都无法找回。历史修改记录对于项目而言,非常重要。

分布式版本控制系统( Distributed Version Control System )
在分布式版本控制系统中,客户端不仅仅签出最新版本的文件,也拷贝了整个版本库信息。如果版本服务器挂掉了,任何一个客户端的版本库信息都可以用来恢复版本服务器,因为所有变更记录都在版本库中。每次 clone 都是把整个库全部完整地拷贝出来。Git 是分布式版本管理系统。

Git 是由 Linux kernel 开发社区开发,被用于管理 Linux kernel 项目开发。有如下几个特征
- 快速
- 简洁设计
- 善于支出非线性开发(如几百个平行进行的开发分支)
- 完全分布式
- 可以支出大型项目,例如 Linux kernel .
Git 和其他版本管理工具的比较
在学习 Git 时候,尽量把其他版本控制系统的概念忘记掉,例如 subversion, perforce 等。这样有助于你理解 Git 。虽然 Git 和其他版本管理工具有类似的用户接口,但是Git 和其他版本管理工具的哲学不一样。
Git 基于整个项目快照,而不是单个文件差异
大多数版本控制系统,如 subversion,把信息存储为一个基于文件的变更列表。

Git 把信息存储为一系列的整个系统快照。每次在 Git 中有提交或修改,整个项目在那一瞬间会被记录下来,并保留对那一瞬的引用。

这是 git 和其他版本工具一个非常重要的差异。
Git 基本基本是本地操作
Git 的绝大部分操作是只用到本地的文件或资源,因为本地有项目完整的历史记录。需要查看项目历史时, Git 无需去到服务器获取历史信息,而是直接从本地数据库读取,这样响应速度很快。即使断网或 VPN 不稳地的情况下, 仍然可以继续工作。
当你在家里但 VPN 无法正常使用时,你仍然可以使用 Git 的大部分功能。这个特性非常适合在家办公、远程办公的开发工作。如果用的是 subversion ,虽然你可以修改文件,但是无法提交修改记录,因为 subversion 数据库没有连上。
Git 上面的所有东西都会被 check-sum, 并被这个 check-sum 引用。check-sum 是对文件内容进行 SHA-1加密后的哈希值,是一个40位的十六进制(0-9 以及 a-f)字符串。例如
24b9da6552252987aa493b52f8696cd6d3b00373
实际上, Git 存储文件,都是基于文件内容的哈希值,而不是基于文件名。
Git 管理下的文件状态
加入到 Git 管理体系的文件有三个状态 : commited, modified, staged。在下面的图例中
- 工作目录 ( Working Directory ) 项目从 git 仓库中签出后存储的位置,用于存储 committed 或者 modified 状态的文件。
- Staging Area 是一个文件,记录着下一次 commit 时会提交的内容,用于存储 staged 状态的文件。有些图形用户界面工具称这个区域为 index , 如 egit。
- git 仓库 ( .git Repository ) 是 git 存储数据的地方,存储的是 committed 状态下的文件。这个 Git 最重要的目录。

Git 的基本工作流
修改文件 --> stage 文件 --> 提交
学习时推荐使用命令行
命令行支持 git 所有的命令,如果你熟悉 git 命令行,你可以很快熟悉 GUI 操作。反之,不一定成立。关于图形用户界面,通过对 github desktop, egit, git GUI 三个工具的使用,觉得 egit 显示的分支最为清晰,这个对 git 来说比较重要,此外 egit 还同时能显示其他的有用信息,推荐使用。
遇到不懂的命令时,可以使用下面的命令,了解如何使用 git.
git help <verb>
参考资料
Chapters 1, Getting Started, git-scm
[git] git 的基本认知的更多相关文章
- error setting certificate verify locations: CAfile: E:/git/Git/mingw64/ssl/certs/ca-bundle.crt
一.问题: 当git clone项目时报 error setting certificate verify locations: CAfile: E:/git/Git/mingw64/ssl/cert ...
- [git]git 分支
什么动作,关键看你想完成什么 1. 添加新的远程分支: git push origin current_local_branch:new_remote_branch 2. 删除远程分支(冒号前必须要有 ...
- Git -> Can't start Git: git.exe
问题描述 导入别人的PyCharm项目后提示:Can't start Git:git.exe 解决办法 Git就是个类似插件,在Git的官网上注册个账号然后每次编译就会自动把程序上传到网上备份.可以方 ...
- GIt -- git push 远程分支老是需要重新输入公钥密码问题处理?
步骤: 先查看远程有哪些分支 删除远程分支,重新关联远程分支 最后再git push 到远程分支 git remote -v git remote rm RedisNote git remote a ...
- [git] git怎样fork一个repo
描述 我定制了一下strongswan的工程.然后想把我自己的定制变成一个repo push到远端git.tong.com与大家分享. 这个时候,应该怎么做? 如果你用过github的话.那么你可以理 ...
- [skill][git] git 常用操作记录
傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...
- [git]git project仓库迁移
转自:https://segmentfault.com/q/1010000000124379 如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作 ...
- can't start Git: git.exe
can't start Git: git.exe :不能启动Git 这是因为Git的可执行文件的路径不正确,需要手动设置,. 找到设置Git的窗口 然后修改一下路径就行了 点击OK就可以了.
- IDEA 中 使用 git(Git)
GitLab GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务.安装方法是参考GitLab在GitHub上的Wiki页面. Git Git( ...
随机推荐
- SQL学习:查询的用法(1)
在SQL servre的使用中,查询的用法是最多的.最重要的,也是最难学习的,因此掌握查询的用法很重要. 先将表的示例上图 员工表: 部门表: ...
- 查看oracle 启动了多久
想看一下系统正常运行了多少天?开机多长时间没有重启了? windows系统 C:\>systeminfo |find “系统启动时间”系统启动时间: 265 天 4 小时 26 分 32 ...
- win8.1磁盘使用率100解决方法
关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态.关闭方法:Win+C – 设置 – 更改电脑设置 – 家庭组 – 离开如果用不到家庭组可以直接把家庭组服务也给关闭了:控制面板 – 管理工具 – ...
- 在Swift中使用libxml2
// // main.swift // C150805_libxml2r2 // http://git.oschina.net/yao_yu/Swift2015/tree/master/C150805 ...
- Oracle数据库常用函数
Oracle常用函数: 20.COS返回一个给定数字的余弦SQL> select cos(-3.1415927) from dual;COS(-3.1415927)--------------- ...
- 配置SHH集群
==特别要注意当前用户的问题== 1. 修改路由信息 vi /etc/hosts 10.211.55.15 hmaster1 10.211.55.16 hmaster2 10.211.55.17 hs ...
- phonegap 4.2 环境搭建 及 项目创建 运行
安装Java 和 ADT 1.首先要安装java运行环境jdk,这个可以自行到官网下载.百度也有下载连接:( http://www.baidu.com/s?tn=baidu&ie=utf-8& ...
- Uva_11462 GCD - Extreme (II)
题目链接 题意: 给定一个n, 求:GCD(1, 2) + GCD(1, 3) + GCD(2, 3) + …… + GCD(1, n) + GCD(2, n) + …… + GCD(n-1, n); ...
- jQuery遍历对象、数组、集合实例
1.jquery 遍历对象 复制代码代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...
- ExecutorService介绍2
Thread和ExecutorService的区别 使用Thread,当子线程执行结束后,主线程如果没有其他执行任务,主线程会终止. /** * Created by litao on 15/10/7 ...