六百字读懂 Git_

六百字读懂 Git_

ID:63508187

大小:12.69 KB

页数:4页

时间:2021-09-08

六百字读懂 Git__第1页
六百字读懂 Git__第2页
六百字读懂 Git__第3页
六百字读懂 Git__第4页
资源描述:

《六百字读懂 Git_》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、六百字读懂Git_【译注】:来自HackerSchool的MaryRoseCook实现了一个纯JavaScript写就的Git:Gitlet,包含了最主要的一些指令。这个项目一是为了了解Git内部原理,二是盼望写一篇深化浅出说明Git核心概念的短文。学习一件东西的原理最好的方法就是去亲自实现它,而设计精致的Git核心功能代码也不过300行。这就是这篇精致的小文:Gitin600words,相应的代码在Github上。短文很好玩,思路清楚也足够深化,值得一看。设想你现在位于alpha/名目下,这里有一个文本文件number.txt,里面的内容只有一个词:“first”。现在执行giti

2、nit将这个alpha文件夹初始化为Git仓库。执行gitaddnumber.txt会将number.txt添加到Git的索引(index)中。这个索引记录了全部Git保持追踪的文件,现在它有了一个映射记录number.txt-first,同时add指令还会把一个包含了first字符串的二进制对象加入Git的对象数据库里。现在执行gitcommit-mfirst。这条指令会做三件事情。首先在对象数据库内创建一个树对象,用以记录alpha名目下的文件列表,这个对象有一个指针指向前面gitadd指令创建的first二进制对象;其次,这条指令还会创建一个commit对象用以代表刚刚提交的版

3、本,它包含一个指针指向刚刚的树对象;第三,master分支也会指向这个新创建的commit对象。现在执行gitclone.../beta。它会创建一个新名目beta并将其初始化为Git仓库,然后把alpha仓库的对象数据库中全部对象拷贝给beta的对象数据库,将beta的master分支像alpha的master一样指向相应的对象。它还依据first提交的内容配置索引,并依据索引更新名目下的文件——也就是number.txt。现在切换到beta名目,修改number.txt的内容为“second”,执行gitaddnumber.txt和gitcommit-msecond,新创建的提交

4、对象second(译注:姑且称之为second)会有一个指向父提交(first)的指针,表示second继承自first,而master分支则指向second提交。回到alpha名目,执行gitremoteaddbeta../beta,将beta仓库设为远程仓库。然后执行gitpullbetamaster。在这条指令背后,它其实会执行gitfetchbetamaster,从beta仓库中找到second提交的相关对象拷贝到alpha仓库;把alpha中关于beta的master分支记录指向这个second提交;更新FETCH_HEAD指向刚刚从beta仓库拉取的master分支,还是

5、这个second提交。此外,pull指令还会执行gitmergeFETCH_HEAD。从FETCH_HEAD得知最近拉取的分支是beta仓库的master分支,据此拿到相应的对象,也就是second提交对象。此时alpha的master分支指着first提交,正好是second的祖先提交,于是对于merge指令来说只需要将master分支指向second提交即可。接下来merge指令还会更新索引以匹配second提交的内容,并且相应更新工作名目中的文件。现在执行gitbranchred,创建一个名为“red”、指向second提交的新分支。然后执行gitcheckoutred。在ch

6、eckout之前,HEAD指向master分支,执行指令之后它就指向了red分支,使得red成为当前分支。接下来把number.txt的内容修改为“third”,执行gitaddnumbers.txt和rungitcommit-mthird。之后再执行gitpushbetared,这条指令会把alpha仓库内跟third提交相关的对象拷贝至beta仓库,并且将(alpha仓库内记录的)beta仓库red分支指向third提交。就酱。更多信息请查看IT技术专栏...

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。