Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13
Git 中的對象模型和文件的詳細視圖
文章目錄
- Git 中的對象模型和文件的詳細視圖
- 初始狀態(tài)
- 編輯一個文件之后
- 暫存文件后
- 提交之后
- 參考資料
本文將用幾幅圖來可視化一個叫 file1的文件從修改到暫存,再到提交的整個過程。相信會對你理解 Git 有一些幫助。
初始狀態(tài)
初始狀態(tài)如下圖所示:
可以看到,工作目錄包含file1和file2兩個文件,分別包含內(nèi)容 “foo” 和 “bar”.
除了工作目錄下的file1和file2之外,master 分支上有一個提交(初始提交),用圓形表示。它指向的三角形其實是一棵樹(你可以把它想象成目錄),樹指向了和file1和file2內(nèi)容完全一樣的 “foo” 和 “bar”.
索引中的那個三角形,和對象庫的那棵樹是完全一樣的,它們都指向相同的對象(“foo” 和 “bar”)。
這幅圖還告訴我們,分支就是一個指針,指向某個提交。
目前來看,工作區(qū)、索引、對象庫是完全一致的,沒有什么是臟的。
編輯一個文件之后
如圖所示,當把文件file1的內(nèi)容從 “foo” 改成 “quux” 之后,索引和對象庫并沒有變化,但是工作目錄臟了,因為它和索引不一致了。
暫存文件后
當執(zhí)行命令git add file1后,一些有趣的變化發(fā)生了。
Git 首先取出工作目錄中file1的最新版本(“quux”),為它的內(nèi)容計算出一個 SHA1 散列 ID(bd71363),然后把這個 ID 保存在對象庫中(當然,文件內(nèi)容也會保存在對象庫中)。接下來,Git 會改變索引,讓索引指向新的file1。由于文件file2沒有變化,所以索引依然指向原來的file2。
此時,工作目錄與索引是一致的。但是,索引和對象庫不一致。
提交之后
啊呀,提交之后好像圖示有點亂啊。別著急,我來解釋一下。
首先,索引對象轉化成了一個真實的樹對象(深色的三角形),這個對象會以 SHA1 命名(圖上沒有標出來而已),被放到對象庫中。
其次,用你的日志消息創(chuàng)建了一個新的提交對象(深色的圓形)。新的提交對象會指向新創(chuàng)建的樹對象,并且指向前一個提交。
最后,master 分支的引用從最近一次提交移動到新創(chuàng)建的提交。
此時,工作目錄、索引和對象庫再次同步,又變得一致了。
參考資料
《Git 版本控制管理(第2版)》,人民郵電出版社
總結
以上是生活随笔為你收集整理的Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年中国人工智能商业落地研究报告
- 下一篇: Git 分支的创建与切换 —— Git