前面我們了解了 Git 的誕生和它的相關(guān)基本概念,那么它到底是怎樣去管理我們的文件版本的呢?本節(jié)內(nèi)容就來(lái)講解下 Git 的工作流程是怎樣的,會(huì)從理論和實(shí)際操作兩方面配合講解。但由于大家剛?cè)腴T,很多命令參數(shù)不太了解,實(shí)際的命令操作部分作為輔助理解,后面還會(huì)有很多機(jī)會(huì)帶大家去接觸實(shí)操,先不用怕哈。好了,開(kāi)始我們今天的內(nèi)容!
1. 工作流程介紹
我們先從工作流程說(shuō)起,基本的 Git 工作流程如下:
a. 修改:修改工作區(qū)(Working Directory)中的文件。
b. 暫存:選擇要作為下一次提交部分的那些更改,僅將這些更改添加到暫存區(qū)域(Staging Area)。
c. 提交:執(zhí)行一次提交,該提交將獲取本次所在版本的文件并將該快照永久存儲(chǔ)到你的 Git 目錄(.git directory)中。
將這三個(gè)流程串起來(lái),可以通俗地理解為:先將本地文件做一修改,修改之后我們要怎么告訴 Git 呢?所以就需要通過(guò)命令將本地修改先添加到暫存區(qū),將暫存區(qū)理解為一個(gè)臨界區(qū)。但提交到暫存區(qū)之后,還未正式納入 Git 的管理,等你確認(rèn)這部分內(nèi)容需要正式提交到 Git 倉(cāng)庫(kù)的時(shí)候,再通過(guò)提交命令執(zhí)行提交操作。那么,一個(gè)最基本的工作流程就結(jié)束了。
對(duì)于一些內(nèi)容大家是不是還有點(diǎn)懵呢?接下來(lái)我挑其中涉及到的概念詳細(xì)說(shuō)明下,或許對(duì)大家理解有幫助。請(qǐng)繼續(xù)往下看。
2. 相關(guān)概念
2.1 工作區(qū)
工作區(qū)是項(xiàng)目一個(gè)版本的單個(gè)檢出(checkout)。這些文件將從 Git 目錄中的數(shù)據(jù)庫(kù)中拉出(pull),并放置在磁盤上供你使用或修改。
也就是說(shuō),我們從 Git 上檢出的某一個(gè)版本的文件到本地并存儲(chǔ)在本地磁盤后,此時(shí)本地的環(huán)境就是工作區(qū),我們做的所有操作都在此基礎(chǔ)上進(jìn)行。
2.2 暫存區(qū)
暫存區(qū)域是一個(gè)文件,通常包含在你的 Git 目錄中,用于存儲(chǔ)有關(guān)下一次提交的內(nèi)容的信息,也可以叫 “索引”。
暫存區(qū)可以理解為工作區(qū)修改后的那部分即將用于正式提交的文件存儲(chǔ)的位置,是一個(gè)本地目錄和 Git 版本庫(kù)正式管理的目錄之間的一個(gè)臨界區(qū),這部分存放的就是本地做了修改后告訴 Git 我即將要提交但還沒(méi)正式提交的那些內(nèi)容。
2.3 本地倉(cāng)庫(kù)
本地倉(cāng)庫(kù)可以簡(jiǎn)單理解成一個(gè)目錄,這個(gè)目錄里面的所有文件都被 Git 管理,Git 記錄了每個(gè)文件的修改、刪除,因此我們可以對(duì)歷史版本進(jìn)行查看或者還原。
那么,如何創(chuàng)建一個(gè)版本庫(kù)呢?(說(shuō)明:以下內(nèi)容作為 “本地倉(cāng)庫(kù)” 概念的輔助理解,具體命令操作后續(xù)會(huì)更多接觸,先不用糾結(jié))
a. 選擇一個(gè)合適的地方,創(chuàng)建一個(gè)空目錄。
b. 在目錄下執(zhí)行:git init 命令即可初始化一個(gè)本地倉(cāng)庫(kù)。
c. 之后當(dāng)前目錄會(huì)出現(xiàn)一個(gè)隱藏的.git
的目錄,這個(gè)目錄是 Git 來(lái)跟蹤管理版本庫(kù)的,不要手動(dòng)修改這個(gè)目錄里面的文件,否則會(huì)把 Git 倉(cāng)庫(kù)給破壞了。
d. 本地倉(cāng)庫(kù)初始化完成后,我們就可以在本地倉(cāng)庫(kù)進(jìn)行文件的管理。
2.4 遠(yuǎn)程倉(cāng)庫(kù)
上一步已經(jīng)在本地創(chuàng)建了一個(gè) Git 倉(cāng)庫(kù),然后可以在 GitHub 上再創(chuàng)建一個(gè) Git 倉(cāng)庫(kù),并且讓這兩個(gè)倉(cāng)庫(kù)進(jìn)行遠(yuǎn)程同步。GitHub 上的倉(cāng)庫(kù)就是遠(yuǎn)程倉(cāng)庫(kù),可以讓其他人通過(guò)該倉(cāng)庫(kù)來(lái)共同操作。
那么,怎么進(jìn)行創(chuàng)建、同步遠(yuǎn)程倉(cāng)庫(kù)到本地倉(cāng)庫(kù)呢?具體步驟如下(說(shuō)明:以下內(nèi)容作為 “遠(yuǎn)程倉(cāng)庫(kù)” 概念的輔助理解,具體命令操作后續(xù)會(huì)更多接觸,先不用糾結(jié)):
- 登錄 github,主頁(yè)左邊部分 repositories,點(diǎn)擊 new 按鈕 。
- 填寫基本信息,點(diǎn)擊 Create repository 按鈕。
- 之后,我們可以根據(jù)提示,將本地已經(jīng)創(chuàng)建好的倉(cāng)庫(kù),同遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行關(guān)聯(lián)。
- 先在本地倉(cāng)庫(kù)新建一個(gè)文本,通過(guò) git add 命令添加到暫存區(qū),并通過(guò) git commit 命令將暫存區(qū)內(nèi)容提交到 master 分支(關(guān)于分支的知識(shí),后面小節(jié)會(huì)介紹)。
- 將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)。
- 至此,我們已經(jīng)初步地建立了一個(gè)遠(yuǎn)程倉(cāng)庫(kù),并且與本地倉(cāng)庫(kù)進(jìn)行了關(guān)聯(lián)。
注意:
當(dāng)直接執(zhí)行:git push -u origin master 時(shí)會(huì)報(bào)錯(cuò):
error: src refspec master does not match any.
error: failed to push some refs to ‘https://github.com/javaDreame/git_study.git’
原因是本地倉(cāng)庫(kù)是個(gè)空目錄,沒(méi)有文件不能關(guān)聯(lián)。因此需要先創(chuàng)建一個(gè)文本,并使用 add/commit 命令添加并提交到本地倉(cāng)庫(kù),再進(jìn)行遠(yuǎn)程關(guān)聯(lián)。
重要的話說(shuō)三遍,先理解流程概念,先理解流程概念,先理解流程概念!
3. 總結(jié)
關(guān)于 Git 的工作流程我們先講到這里,大家同樣還是先從理論概念上有一個(gè)認(rèn)識(shí)。在操作之前,我們首先要搞清理論概念,才能知其然知其所以然,不要急于動(dòng)手。實(shí)際操作和命令使用后續(xù)會(huì)展開(kāi)說(shuō)明,練習(xí)的多了自然就熟練了。
通過(guò)本小節(jié),我們學(xué)習(xí)了如下知識(shí):
- Git 工作流程簡(jiǎn)介:它是由修改、暫存、提交三個(gè)步驟來(lái)完成的。
- Git 工作流程中涉及的相關(guān)概念:包括工作區(qū)、暫存區(qū)、本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的理解。
- Git 創(chuàng)建本地倉(cāng)庫(kù)、創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)以及雙方進(jìn)行簡(jiǎn)單的關(guān)聯(lián)操作。