[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( ...
随机推荐
- 深入理解shared pool共享池之library cache系列二
背景 继续上文:深入理解shared pool共享池之library cache系列一,学习library cache数据结构,本文主要学习library cache object(lco)的数据结构 ...
- [Twisted] Protocols协议和Protocol Factories 协议工厂
Protocols 描述了如何异步处理网络事件.Twisted维护了许多协议的实现,如HTTP,Telent,DNS,IMAP.Portocols实现了IProtocol接口, IProtocol包含 ...
- jQuery无刷新上传学习心得
记得刚离开大学,进入目前这家公司不到一个月时,有一位前辈给我们当时的新人讲了下JS无刷新上传的相关知识. 在此之前,一直都是在使用C#提供的服务器上传控件FileUpload,但是每次使用时,都会刷新 ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- 一天学完UFLDL
学习UFLDL笔记 第一节 神经网络 神经元长这样 大写W看着有点不习惯.. 激活函数, 就是上面式子中的f. 可以选 sigmoid函数(或者叫 logistic回归,对数几率函数),反正就是这样一 ...
- 解决WEB(apache)服务器time_wait过高的性能优化过程
目录 1.网站的硬件环境 2.修改Httpd.conf 3.修改sysctl.conf文件 一.网站环境LAMP硬件环境 [root@www conf]# dmidecode -s processor ...
- asp.net中的<%%>形式的详细用法实例讲解
asp.net中的代码分离模式我们肯定都不陌生,C#(或者其它语言)写的代码一般不会和设计语言HTML混在一起,但是有的时候也避免不了,这时就会在UI页面里用<%%>来绑定显示.绑定变量数 ...
- DataTable 无法转换的错误
目前基本上检索都已经离不开Linq了.所以最近在Linq的过程中出现了一些意外情况,特此记录下来. 先描述一下场景: 有一个查询的要求是这样的,检索出Status > 1 的数据.因为要根据其他 ...
- win7 进程kill
文章出处:http://www.cnblogs.com/winstic/,请保留此连接 在使用windows操作时,经常会遇到一些顽固进程大占CPU,很是苦恼:今天就遇到这样的问题,刚写的一个一个分布 ...
- c语言技巧--长期更新
1. #define LOWER(c) (unsigned char)(c | 0x20) 换成小写 2. gcc -Wall -Werror //告警当成 错误来处理 ...