如何利用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用来存储结构 。
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134825_1_lit.jpg)
3、commit里存储了指向的tree object,parent commit object,author+time,committer+time,commit comment
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134847_1_lit.jpg)
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134856_1_lit.jpg)
4、tag里存储了指向的commit object,type,tag name,tagger+time,tag comment
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134926_1_lit.png)
接下来再说references,references存储在.git/refs下面。references中包括两种类型:branch和 tag
1、branch指向某一个commit object,branch的名字一般都会被设置成可读性很强的,它可以帮助我们记住上一次我们操作的commit是什么。
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134953_1_lit.png)
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135010_1_lit.jpg)
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
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135045_1_lit.jpg)
切到本地的dev分支
git checkout dev
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135105_1_lit.jpg)
切到远程master分支
git checkout origin/master
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135127_1_lit.png)
2、tag指向一个tag object,tag的名字一般都会被设置成可读性很强的,它可以帮助我们记住有一定意义的commit。 tag存储在.git/refs/tag下
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135146_1_lit.png)
二、Git中文件的生命周期
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135220_1_lit.jpg)
.git文件夹的结构
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135234_1_lit.jpg)
(本篇文章由红豆Live测试经理高旭撰写)
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用来存储结构 。
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134825_1_lit.jpg)
3、commit里存储了指向的tree object,parent commit object,author+time,committer+time,commit comment
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134847_1_lit.jpg)
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134856_1_lit.jpg)
4、tag里存储了指向的commit object,type,tag name,tagger+time,tag comment
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134926_1_lit.png)
接下来再说references,references存储在.git/refs下面。references中包括两种类型:branch和 tag
1、branch指向某一个commit object,branch的名字一般都会被设置成可读性很强的,它可以帮助我们记住上一次我们操作的commit是什么。
![](http://articles.csdn.net/uploads/allimg/170510/41_170510134953_1_lit.png)
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135010_1_lit.jpg)
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
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135045_1_lit.jpg)
切到本地的dev分支
git checkout dev
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135105_1_lit.jpg)
切到远程master分支
git checkout origin/master
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135127_1_lit.png)
2、tag指向一个tag object,tag的名字一般都会被设置成可读性很强的,它可以帮助我们记住有一定意义的commit。 tag存储在.git/refs/tag下
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135146_1_lit.png)
二、Git中文件的生命周期
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135220_1_lit.jpg)
.git文件夹的结构
![](http://articles.csdn.net/uploads/allimg/170510/41_170510135234_1_lit.jpg)
(本篇文章由红豆Live测试经理高旭撰写)
相关文章推荐
- 利用Git进行项目代码管理之初级版
- 如何利用GIT和oschina来管理项目
- 如何开始对项目进行管理(一)
- 如何进行高效的项目管理?(转)
- 如何进行项目管理
- 如何开始对项目进行管理(二)
- 项目管理手记(24) ERP项目实施中如何进行项目督导
- 如何有效地进行项目管理
- 项目中如何进行有效的沟通管理(一)
- 如何利用IP安全管理策略进行安全漏洞防护
- 项目经理修炼手册 1.4面对复杂的管理如何进行自我调试(如何进行选择)
- 看看别人是如何进行软件项目管理的
- 如何进行项目管理
- 项目经理修炼手册,泄露章节,面对复杂管理工作如何进行自我调节
- 如何进行有效的分布式项目管理
- 看看别人是如何进行软件项目管理的
- 面对复杂的管理如何进行自我调试(项目经理修炼手册第一章)
- 看微软经理人如何进行项目管理
- 如何进行有效的软件测试外包项目的管理?
- 如何利用 IBM Rational Project Tracker 完成项目管理