您的位置 首页 直播技巧

git管理项目

git管理项目

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文件夹的结构


关于更多git管理项目内容,可以收藏本网页。李娜被扇耳光视频git管理项目 如何利用Git进行更高效的项目管理?

关于作者: 234yp

热门文章