版本控制Git(1)——理解暂存区

一、svn和Git的比较

我们都知道传统的源代码管理都是以服务器为中心的,每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上。这种做法看似完美,但是有致命的缺陷。

1. 开发者不能本地跟踪代码版本。 所有的信息都是在服务器上。  你把本地的代码改了很多,但是又不能提交。通常,本地只能缓存一个版本。对于小项目无所谓, 但是项目一复杂,人员多就麻烦了。 通常你本地的代码都全是红色的。自己都不知道今天修改了什么, 有哪些修改是真正应该提交给svn的。

2. 因为第一点,一旦离开服务器, 程序猿将无法正常工作。 因为本地不能跟踪代码版本。  你的(几乎)任何操作都必须连上服务器。比如, show log, blame,show history等等。

3. 中央服务器压力过大。  因为每个人都必须把代码提交到服务器,并且做daily build。

4. 对于大型项目, svn几乎不可用。 例如linux内核项目, 开发者何止几万? 都直接提交给svn服务器的话还不乱套了。

5. 对于个人的私人项目而言(或者对于小公司的项目), 不用版本控制当然不行,但是为了用版本控制而专门架设svn服务器有有点舍不得。

有没有能解决上述几个问题的东东呢?  恩, 答案是肯定的。

Linux内核的作者也遇到了这些问题,于是他决定再一次改变世界, 重写一个可以本地使用的svn。

如上图,就是一个典型的Git的实际生产环境,开发者之间通过 pull和push操作, 把别人的修改拉过来,或者把自己的修改推给别人。接下来我们来详细研究一下Git的过程。

二、Git的安装

Linux下安装:shell下输入sudo apt -get install git-core,按下回车后输入密码,即可完成Git的安装。

Windows下安装:先从组织SVN库的项目级标准工作环境目录中,获取Git安装包Git-1.9.5-preview20141217.exe,完成安装。

Windows上Git是可以在图形界面上进行操作的,但是不建议这么做,Git的各种命令才是你应该掌握的,并且不管你在哪个操作系统中,使用命令操作Git肯定都是通用的。

Linux系统,打开shell界面。Windows系统,打开Git Bash。

Mac OS系统:

下载地址:https://code.google.com/p/git-osx-installer/

我早已为大家下载好了,不用翻墙去下载。下载地址:http://download.csdn.net/detail/lxq_xsyu/8430713

安装好后重启控制台,执行 git --version

lixiaoqiangdeMac-mini:Documents lixiaoqiang$ git --version

git version 1.9.3 (Apple Git-50)

三、配置身份

配置身份,git config命令如下:

还可以配置开启颜色显示

git config --global color.ui true

配置了身份后,我们提交代码时Git就可以分辨是谁提交的了。

配置完成后,可以用同样的命令(去掉最后的名字和邮箱)来查看是否配置成功.

下面我们先通过两个命令删除上面的配置

创建一个版本库(用 git init  -->创建文件-->改变文件内容->git add xxx->git commit -m "xxx")

可以看到在提交的时候会失败,提示我们设置用户名和邮箱,我们可以通过git config -e来查看配置文件

这三个分别是版本库级别配置文件、全局配置(用户主目录下)文件、系统配置文件(/etc目录下)

四、Git的暂存区

Git的三个基本操作、git init 、git add 和 git commit 就我们已经知道,可以通过git status 查看文件状态, git log --stat查看提交的文件的变更。

在我们创建版本库的时候会自动生成一个 .git文件夹内容如下:

文件.git/index实际上是一个包含了文件索引的目录树,就像一个虚拟的工作区,在这个目录树中记录了文件的状态信息(时间戳和文件长度等)。文件的内容并没有存储在其中,而是保存在Git对象库.git/objects目录中,文件索引建立了文件和对象库中实体之间的对应。

图中的objects就是Git的对象库,index是一个记录文件状态的暂存区,此时HEAD指向master分支的一个游标。

当我们执行 git add 命令的时候,暂存区的目录树将被更新,同时修改的文件内存会被写入Git的对象库objects中。

当我们执行 git commit 命令的时候,master分支会相应更新,master新指向的目录树就是提交时暂存的目录树。

当我们执行 git reset HEAD命令的时候,暂存区的目录树会被重写,会被master分支指向的目录树替换,但是不影响工作区。

当我们执行 git rm --cached <file>命令时,会直接从暂存区删除文件,工作区不改变。

当我们执行 git checkout . 或 git checkout -- <file> 时,会用暂存区的全部文件或指定文件替换工作区的文件。

当我们执行 git checkout HEAD . 或 git  checkout HEAD <file>命令时,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。

时间: 2024-08-25 06:46:21

版本控制Git(1)——理解暂存区的相关文章

git(工作区,暂存区,管理修改,撤销修改,删除文件)

工作区和暂存区 984次阅读 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的

2017-03-10&lt;Git工作区及暂存区&gt;

Git工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的gitlianxi文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. HEAD为.git的指针 把文件往Git版本库里添加的时候,是分两步执行的: 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区: 第二步是用gi

Git 工作区、暂存区和版本库

基本概念 我们等来理解下Git工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录 强烈推荐git新手阅读 暂存区:英文叫stage,或index.一般存放在igt 目录下的index文件(.git/index)中,所以我们把暂存区时也叫作索引(index). 版本库:工作区有一个隐藏目录.git 这个不算工作区,而是Git的版本库. 下面这个图展示了工作区.版本库中的暂存区和版本之间的关系: 图中左侧为工作区,右侧为版本库.在版本库中标记为"index"的区域就是暂存区(s

Git-Runoob:Git 工作区、暂存区和版本库

ylbtech-Git-Runoob:Git 工作区.暂存区和版本库 1.返回顶部 1. Git 工作区.暂存区和版本库 基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index). 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. 下面这个图展示了工作区.版

git工作区和暂存区

工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD. 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的: 第一步是用git add把文件

GIT 工作区和暂存区

工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的studygit文件夹就是一个工作区. 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HE

Git(工作区和暂存区概念)

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD. 分支和H

git中的暂存区与工作区

工作区:本地暂存区:执行git add后将文件添加到暂存区(stage)版本库:执行git commit后将文件暂存区的所有文件添加到版本库git checkout --<filename>将文件在工作区的修改全部撤销有两种情况:已经经过git add添加到暂存区的,恢复到暂存区的内容未添加到暂存区,恢复到和版本库一样

Git 初学二(暂存区)

暂存区 1. Git checkout – xx.txt 撤销工作区中xx.txt 文件尚末提交的修改(用暂存区更新工作区对应的内容) 3.  git ls-tree –l HEAD 查看HEAD指向的目录树(参数-l 显示文件大小) git-ls-files –s 显示暂存区的目录树 4. git stash 保存当前工作进度. 邓永豪 2014.11.16