六百字讀懂 Git
來(lái)源:易賢網(wǎng) 閱讀:619 次 日期:2015-04-02 15:51:18
溫馨提示:易賢網(wǎng)小編為您整理了“六百字讀懂 Git”,方便廣大網(wǎng)友查閱!

【譯注】:來(lái)自 Hacker School 的 Mary Rose Cook 實(shí)現(xiàn)了一個(gè)純 JavaScript 寫就的 Git:Gitlet,包含了最主要的一些命令。這個(gè)項(xiàng)目一是為了了解 Git 內(nèi)部原理,二是希望寫一篇深入淺出解釋 Git 核心概念的短文。學(xué)習(xí)一件東西的原理最好的方法就是去親自實(shí)現(xiàn)它,而設(shè)計(jì)精巧的 Git 核心功能代碼也不過(guò) 300 行。這就是這篇精巧的小文:Git in 600 words,相應(yīng)的代碼在 Github 上。短文很有趣,思路清晰也足夠深入,值得一看。

設(shè)想你現(xiàn)在位于 alpha/ 目錄下,這里有一個(gè)文本文件 number.txt,里面的內(nèi)容只有一個(gè)詞:“first”。

現(xiàn)在執(zhí)行 git init 將這個(gè) alpha 文件夾初始化為 Git 倉(cāng)庫(kù)。

執(zhí)行 git add number.txt 會(huì)將 number.txt 添加到 Git 的索引(index)中。這個(gè)索引記錄了所有 Git 保持追蹤的文件,現(xiàn)在它有了一個(gè)映射記錄 number.txt -> first,同時(shí) add 命令還會(huì)把一個(gè)包含了 first 字符串的二進(jìn)制對(duì)象加入 Git 的對(duì)象數(shù)據(jù)庫(kù)里。

現(xiàn)在執(zhí)行 git commit -m first。這條命令會(huì)做三件事情。首先在對(duì)象數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建一個(gè)樹(shù)對(duì)象,用以記錄 alpha 目錄下的文件列表,這個(gè)對(duì)象有一個(gè)指針指向前面 git add 命令創(chuàng)建的 first 二進(jìn)制對(duì)象;第二,這條命令還會(huì)創(chuàng)建一個(gè) commit 對(duì)象用以代表剛剛提交的版本,它包含一個(gè)指針指向剛剛的樹(shù)對(duì)象;第三,master 分支也會(huì)指向這個(gè)新創(chuàng)建的 commit 對(duì)象。

現(xiàn)在執(zhí)行 git clone . ../beta。它會(huì)創(chuàng)建一個(gè)新目錄 beta 并將其初始化為 Git 倉(cāng)庫(kù),然后把 alpha 倉(cāng)庫(kù)的對(duì)象數(shù)據(jù)庫(kù)中所有對(duì)象拷貝給 beta 的對(duì)象數(shù)據(jù)庫(kù),將 beta 的 master 分支像 alpha 的 master 一樣指向相應(yīng)的對(duì)象。它還根據(jù) first提交的內(nèi)容配置索引,并根據(jù)索引更新目錄下的文件——也就是 number.txt。

現(xiàn)在切換到 beta 目錄,修改 number.txt 的內(nèi)容為“second”,執(zhí)行 git add number.txt 和 git commit -m second,新創(chuàng)建的提交對(duì)象 second(譯注:姑且稱之為 second)會(huì)有一個(gè)指向父提交(first)的指針,表示 second 繼承自 first,而 master 分支則指向 second 提交。

回到 alpha 目錄,執(zhí)行 git remote add beta ../beta,將 beta 倉(cāng)庫(kù)設(shè)為遠(yuǎn)程倉(cāng)庫(kù)。然后執(zhí)行 git pull beta master。

在這條命令背后,它其實(shí)會(huì)執(zhí)行 git fetch beta master,從 beta 倉(cāng)庫(kù)中找到 second 提交的相關(guān)對(duì)象拷貝到 alpha 倉(cāng)庫(kù);把 alpha 中關(guān)于 beta 的 master 分支記錄指向這個(gè) second 提交;更新 FETCH_HEAD 指向剛剛從 beta 倉(cāng)庫(kù)拉取的 master 分支,還是這個(gè) second 提交。

此外,pull 命令還會(huì)執(zhí)行 git merge FETCH_HEAD。從 FETCH_HEAD 得知最近拉取的分支是 beta 倉(cāng)庫(kù)的 master 分支,據(jù)此拿到相應(yīng)的對(duì)象,也就是 second 提交對(duì)象。此時(shí) alpha 的 master 分支指著 first 提交,正好是 second 的祖先提交,于是對(duì)于 merge 命令來(lái)說(shuō)只需要將 master 分支指向 second 提交即可。接下來(lái) merge 命令還會(huì)更新索引以匹配 second 提交的內(nèi)容,并且相應(yīng)更新工作目錄中的文件。

現(xiàn)在執(zhí)行 git branch red,創(chuàng)建一個(gè)名為“red”、指向 second 提交的新分支。

然后執(zhí)行 git checkout red。在 checkout 之前,HEAD 指向 master 分支,執(zhí)行命令之后它就指向了 red 分支,使得 red 成為當(dāng)前分支。

接下來(lái)把 number.txt 的內(nèi)容修改為 “third”,執(zhí)行 git add numbers.txt 和 run git commit -m third。

之后再執(zhí)行 git push beta red,這條命令會(huì)把 alpha 倉(cāng)庫(kù)內(nèi)跟 third 提交相關(guān)的對(duì)象拷貝至 beta 倉(cāng)庫(kù),并且將(alpha 倉(cāng)庫(kù)內(nèi)記錄的)beta 倉(cāng)庫(kù) red 分支指向 third 提交。就醬。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:六百字讀懂 Git
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)