您的位置:首页 > 其它

如何利用Git进行更高效的项目管理?

2017-05-12 00:00 399 查看
摘要: Git是目前最主流的版本管理工具,可以敏捷高效地处理任何或小或大的项目。在日常的开发中,经常会用到各种git命令,像commit,merge,rebase,cherry-pick等,但往往我们只知道这些命令是做什么的,对于底层的原理知之甚少。

Git是目前最主流的版本管理工具,可以敏捷高效地处理任何或小或大的项目。在日常的开发中,经常会用到各种git命令,像commit,merge,rebase,cherry-pick等,但往往我们只知道这些命令是做什么的,对于底层的原理知之甚少。我们在红豆Live开发的过程中,对git思想和基本工作原理进行了详解,希望通过此篇文章让大家对git原理有所了解,从而在平时运用git命令会更加得心应手,游刃有余。

一、Git如何存储数据?

Git通过objects来存储数据,通过references来指向数据。

首先来说objects,objects的名字是一个40位的hash,它是通过objects所存储的值计算出来的。objects存储在.git/objects下面。

Git有4种objects,分别是:blob object、tree object、commit object、tag object。

1、blob用来存储内容。

举个例子,一个文件abc.txt,文件内容是“hello world”,执行git add后生成blob A,存储的值是“hello world”。

当我们把abc.txt里的“hello world”改成“12345”,执行git add后生成新的blob B,存储的值是“12345”。blob A依然存在,而且值依然是“hello world”。

2、tree用来存储结构 。



3、commit里存储了指向的tree object,parent commit object,author+time,committer+time,commit comment





4、tag里存储了指向的commit object,type,tag name,tagger+time,tag comment



接下来再说references,references存储在.git/refs下面。references中包括两种类型:branch和 tag

1、branch指向某一个commit object,branch的名字一般都会被设置成可读性很强的,它可以帮助我们记住上一次我们操作的commit是什么。





branch又分为本地branch(local branch)和远程branch(remote branch)

本地branch存储在.git/refs/heads下面,本地branch是可以移动的(可以通过新提交commit或者reset到旧的commit来改变本地branch的指向)。

远程branch存储在.git/refs/remote下面,远程branch是不可移动的(在远程branch上提交新的commit,可以提交成功,但是远程branch不会指向新的commit)。

在这里需要注意的是,HEAD可以被看作为一个特殊的分支,它永远指向当前的commit。

HEAD在.git/HEAD

HEAD存储的内容有两种:

● 在本地分支上时,HEAD的内容类似这样:ref: refs/heads/master

● 在远程分支或者tag上,HEAD的内容类似这样:551b02adf0a3044ae3a16bfc044db1cfa9e09374 (commit object)

当前分支是本地master



切到本地的dev分支

git checkout dev



切到远程master分支

git checkout origin/master



2、tag指向一个tag object,tag的名字一般都会被设置成可读性很强的,它可以帮助我们记住有一定意义的commit。 tag存储在.git/refs/tag下



二、Git中文件的生命周期



.git文件夹的结构



(本篇文章由红豆Live测试经理高旭撰写)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Git