分布式版本控制系统GIT的使用

一、什么是Git

  Git是一个分布式版本控制系统,Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异(如CVS、Subversion等)。而Git并不保存这些前后变化的差异数据。Git更像是把变化的文件作快照后记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。若文件没有变化,Git不会再次保存,而只对上传保存的快照做一次连接,即若文件未变化则指向上一次提交。

  所谓Git的指纹信息,是指文件在保存到Git之前,所有数据都要进行内容的checksum计算,并将此结果作为数据的唯一标识和索引。也就是说Git会立即察觉到数据的变化。

  受Git控制的文件一般有三种状态:已提交状态(Commited)、已修改状态(Modified)、已暂存状态(Staged)。每一次提交实际上是保存树状态和路径状态。

●已提交:表示该文件已经被安全的保存在本地数据库了;

●已修改:表示修改了某个文件但是还没有提交保存;

●已暂存:也可称为索引(index),表示把已修改的文件放在下次提交时要保存的清单中。

  我们在用Git管理项目的时候,文件流转的三个区域:Git的本地数据目录、工作目录、暂存区域。每个项目都有一个git目录,它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

  所谓的暂存区域只不过是个简单的文件,一般都放在 git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。
  基本的 Git 工作流程如下所示:
1. 在工作目录中修改某些文件。
2. 对这些修改了的文件作快照,并保存到暂存区域。
3. 提交更新,将保存在暂存区域的文件快照转储到 git 目录中。
所以,我们可以从文件所处的位置来判断状态:
如果是 git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

1.安装Git

  Git目前已经属于基础工具了,在yum的base仓库中直接安装即可:

~]# yum install -y git

  可以用命令去获取一个Git仓库或项目,也可从从零创建一个Git项目目录:

~]# git init
Initialized empty Git repository in /root/.git/ #默认在当前用户家目录下创建一个.git的目录

  Git的对象类型: 保存在.git/objects目录下
1.块(blob)对象:文件的每个版本表现为一个块(blob);
2.树(tree)对象:一个目录代表一层目录信息;
3.提交(commit)对象:用于保存版本库一次变化的元数据,包括作者、邮箱、提交日期、日志;每个提交对象都指定一个目录树对象;
4.标签(tag)对象:用于给一个特定对象一个易读的名称;

  .git目录的结构:

~]# ls .git/
branches  description  hooks  objects
config    HEAD         info   refs
~]# tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

  创建或者得到一个git后的大致结构:

  下面通过创建一个项目(文件)来演示这些逻辑:

在家目录下创建一个某项目工作目录:

1 ~]# mkdir -p ./testobj
2 ~]# cd testobj/
3 ~]# git init
4 ~]# cp /etc/passwd ./
5 ~]# vim README
6 test

此时在项目的工作区就有了文件 passwd 和 README ,若想要git跟踪这两个文件(即放入暂存区)可使用命令 git add :

2.暂存

~]# git add passwd README #将passwd和README放至暂存区。

然后可看到.git目录下自动生成了一个 index 目录:

而 .git/objects 目录下生成了两个新目录,并在目录下生成了一串hash值的文件:

现在修改工作目录中的README文件看看会发生什么情况:

~]# vim ../../README #在文件中随便加一行内容。~]# pwd/root/testobj~]# git add README #再次推入暂存区~]# cd .git/objects~]# tree

  这里可以看到比之前多出了一个目录和文件,这是因为每一次暂存都会在objects目录下创建一个对象,不能是空目录,Git是无法追踪空目录的。

可用 git status 查看当前git的状态:

~]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#       new file:   passwd
#

  当文件放至暂存区后,要删除文件需要用 git rm --cached <file>... 命令从暂存区域删除。

  若要查看暂存区中的内容可以用 git cat-file -p <file> ,这里的<file>为暂存区中文件名为hash格式的文件,用cat命令无法查看。

3.提交

  若想提交文件则可用 git commit 命令,查看提交日志可用 git log 。在生产环境中若是提交至git服务器,必须要求先配置真实的个人信息,以便于代码追踪管理。配置个人信息可用 git config 命令来实现。例如要加个人信息可用:

git config --global user.name ready
git config --global user.email 123@.com

  配置个人信息后会在家目录下自动生成 .gitconfig 文件,里面存放着配置的个人信息。

  文件提交后,当我们把 .git 目录复制到其他目录时,我们就可以用 git checkout -- <file> 命令将文件重构出来。

mkdir -p ~/myobj
cp ~/testobj/.git ~/myobj

  这时新目录中是没有passwd和README文件的,用 git checkout 命令后:

~]# git checkout -- README passwd~]# lsREADME passwd

  可以看到文件都被恢复了,并且内容是和之前一样的,但要注意,提交什么才能恢复什么。

4.Git中的文件分类

已追踪的(tracked):已经在版本库中,或者已经使用git add命令添加至索引中的文件;
被忽略的(Igored):在版本库中通过“忽略文件列表”明确声明为被忽略的文件;
未追踪的(untracked):上述两类之外的其它文件;

5.设定标签tag

  在生产环境中可以为每次提交创建标签(tag),便于版本管理。命令为 git tag <tagname> <commit hash>

6.创建分支

  在开发过程中常做分支是很有必要的。

  创建分支可使用 git checkout -b 或 git branch ,使用 git checkout 来切换分支,每一次切换都会根据分支的具体数据改变工作目录的文件。

 1 myobj]# git branch brh
 2 myobj]# git branch --list
 3 * (detached from V1)
 4   brh
 5   master
 6 myobj]# git checkout brh
 7 Switched to branch ‘brh‘
 8 myobj]# git branch --list
 9 * brh #星号表示当前所在的分支
10   master

  合并分支则用 git merge 命令

7.撤销提交

  撤销提交可以用 git reset 命令,该命令有三个重要的参数:

1. --soft :将HEAD指向上一次提交,不会改变工作目录,也不会影响暂存区。

2. --mixed :将HEAD指向上一次提交,并回退暂存区,但不会改变工作目录。

3. --hard :改变HEAD并且删除暂存区数据,并修改工作目录。

8.差异比较

   git diff 命令可以用来比较两次提交的不同。

原文地址:https://www.cnblogs.com/readygood/p/9944441.html

时间: 2024-10-10 04:49:56

分布式版本控制系统GIT的使用的相关文章

[.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

[.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 http://www.cnblogs.com/yubinfeng/p/5182271.html 本篇导读: 上篇介绍了一款Windows环境下的Git服务器工具GitStack ,搭建了最简单的Windows下的Git服务器,需要再次提醒的是

[.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境【转】

转自:http://www.cnblogs.com/yubinfeng/p/5182271.html 前面介绍了两款代码管理工具VSS和SVN,这两种管理工具在很长一段时间曾为我们的代码管理提供了便利,本篇介绍一款思维方式完全不同(也可以说不合常理)的版本控制系统——Git.可以说Git目前非常火,这与设计者剑指偏锋的设计思想有很大关系.Git采用发散的思维管理代码,最大的特点就是分布式,他可以让来自不同地区的开发者共同完成一个作品,让每个开发者都可以发挥个性,同时又可以由发起者(即项目管理者)

分布式版本控制系统---Git&amp;GitHub

 GIT的起源 Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具.开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可

分布式版本控制系统 Git 教程

目录   简介  原理  安装  配置  命令  小结  资料 简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布式版本控制系统前,有必要先了解一下传统的集中式版本控制系统. 集中化的版本控制系统,诸如 CVS,Subversion 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文

分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

本篇导读: 可以说Git目前非常火,这与设计者剑指偏锋的设计思想有很大关系.Git采用发散的思维管理代码,最大的特点就是分布式,他可以让来自不同地区的开发者共同完成一个作品,让每个开发者都可以发挥个性,同时又可以由发起者(即项目管理者)统一发布新版本.各个地区的开发者,还可以离线开发,这样版本管理系统之所以火,也和当今社会万众创新的氛围分不开.通过Git你可以尽情的发挥想象力,开源的春天已经到来,让我们启航吧!  1. Git简介 名称:Git (Git的读音为/g?t/,开源.免费.分布式的版

分布式版本控制系统--Git使用

前言 花了点时间,学习Git版本管理工具,以前用过SVN比较之后,确实Git比SVN好用,更强大.简单总结了一些Git使用命令,如果想弄明白Git请猛击底下推荐学习网站. 使用总结 创建版本库: 初始化一个Git 仓库,使用git int 命令 添加文件到Git仓库,分两步: 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件: 第二步,使用命令git commit,完成. 查看内容 要随时掌握工作区的状态,使用git status命令. 如果git status告诉你有文件被

分布式版本控制系统Git(二):github

前言 但凡是喜欢研究技术,或者听大牛们说起过的,都应该至少是听过github这个东西.具体就不介绍了,不了解的可以去了解了解,最主要的功能当然是代码托管啦,上面有各种各样的大牛写的项目.另外这一章不仅仅是说明如果跟github关联操作,因为github是远程版本库,实际上在公司中,也只是先给你一个远程版本库的地址给你,你自己去克隆,然后开发,所以下面操作,可以跟公司远程版本库操作一致. 连接github 1. 当然是注册github账号了 https://github.com 2. 创建SSH密

分布式版本控制系统Git的安装与使用

业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103 远程仓库地址是:https://github.com/BinGuo666/git 1.下载安装配置用户名和邮箱. 2. 创建工作目录并通过git init命令把这个目录变成Git可以管理的仓库. ls -a 命令可以发现工作目录下多了一个.git的隐藏目录,该目录是Git用于跟踪管理版本库的,别手动修改.git里的文件,免得破坏了Git仓库. 3. 在工作目录下准备文

分布式管理控制系统Git与项目托管平台Github相关概念、操作方法与常用命令

简介 GitHub 是一个面向开源及私有软件项目的托管平台 因为它只支持 Git 作为唯一版本库格式进行托管,所以命名GitHub Git是一个开源的分布式版本控制系统 可以有效.高速的处理从很小到非常大的项目版本管理 它也是目前世界上最先进的分布式版本控制系统 什么是版本控制系统呢? 简单地说,它有以下功能 备份(记录多个版本文件的功能) 记录操作时间线(查看历史操作,进行版本回滚.前进的功能) 多端共享代码(代替各种云盘的功能) '自动'合并(解决多人开发冲突问题) 这样的一个系统的优点是不