设为首页 加入收藏

TOP

Git内部原理之Git引用(二)
2018-10-28 10:11:12 】 浏览:313
Tags:Git 内部 原理 引用
11dd7bae304ccfa63b35a6eb8c object 3ac728ac62f0a7b5ac201fd3ed1f69165df8be31 type commit tag v1.1 tagger jingsam <jing-sam@qq.com> 1529481368 +0800 test tag

可以看到,上面的Git对象存储了我们填写的附注信息。

总之,普通的标签引用和附注引用同样都是存储的是40位hash值,指向一个Git对象,所不同的是普通的标签引用是直接指向提交对象,而附注标签是指向一个附注对象,附注对象再指向具体的提交对象。

另外,本质上标签引用并不是只可以指向提交对象,实际上可以指向任何Git对象,即可以给任何Git对象打标签。

远程引用

远程引用,类似于.git/refs/heads中存储的本地仓库各分支的最后一次提交,在.git/refs/remotes是用来记录多个远程仓库各分支的最后一次提交。

我们可以使用git remote来管理远程分支:

$ git remote add origin git@github.com:jingsam/git-test.git

上面添加了一个origin远程分支,接下来我们把本地仓库的master推送到远程仓库上:

$ git push origin master
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 720 bytes | 360.00 KiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
To github.com:jingsam/git-test.git
 * [new branch]      master -> master

这时候在.git/refs/remotes中的远程引用就会更新:

$ cat .git/refs/remotes/origin/master
3ac728ac62f0a7b5ac201fd3ed1f69165df8be31

和本地仓库的master比较一下,发现是一模一样的,表示远程分支和本地分支是同步的:

$ cat .git/refs/heads/master
3ac728ac62f0a7b5ac201fd3ed1f69165df8be31

由于远程引用也是Git引用对象,所以理论上也可以使用git update-ref来手动维护。但是,我们需要先把代码与远程仓库进行同步,在远程仓库中找到对应分支的HEAD,然后使用git update-ref进行更新,过程比较麻烦。而我们在执行git pullgit push这样的高层命令的时候,远程引用会自动更新。

总结

到这里,三种Git引用都已分析完毕。总的来说,三种Git引用都统一存储到.git/refs目录下,Git引用中的内容都是40位的hash值,指向某个Git对象,这个对象可以是任意的Git对象,可以是数据对象、树对象、提交对象。三种Git引用都可以使用git update-ref来手动维护。

三种Git引用对象所不同的是,分别存储于.git/refs/heads.git/refs/tags.git/refs/remotes,存储的文件夹不同,赋予了引用对象不同的功能。HEAD引用用来记录本地分支的最后一次提交,标签引用用来给任意Git对象打标签,远程引用正式用来记录远程分支的最后一次提交。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇说说 MQ 之 Kafka(三) 下一篇说说 MQ 之 Kafka(二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目