在合肥做網(wǎng)站多少錢千川推廣官網(wǎng)
.git目錄結(jié)構(gòu)
我們?cè)谇拔闹刑徇^了.git
目錄,也明確說了我們不能手動(dòng)去.git
目錄下創(chuàng)建修改等任何操作。
添加文件
我們現(xiàn)在已經(jīng)了解到,git是一個(gè)版本控制器,可以對(duì)我們的文件進(jìn)行管理。而我們需要使用git管理文件的時(shí)候,我們必須將這些文件放到git倉庫中,只有在git倉庫中的文件才可以被我們的git追蹤管理。
看完上面我們有個(gè)疑問:需要使用 git 進(jìn)行文件管理,需要把文件放到倉庫中,那是不是要我們把文件添加到
.git
目錄下去呢?
文章開頭又說我們不能手動(dòng)去添加或修改.git
目錄下的任何文件,那我們?cè)撛趺磳⑽募砑拥絺}庫中去呢?
那接下來我們就看看如何將文件添加到版本庫中去吧。
首先說明一下,所有的版本控制系統(tǒng),其實(shí)只能跟蹤到文本文件的改動(dòng),比如txt文件、網(wǎng)頁、程序代碼等等,Git也不例外。版本控制系統(tǒng)可以記錄你每次的改動(dòng),比如在第5行添加了一個(gè)單詞“l(fā)inux”,在第八行刪除了一個(gè)單詞“windows”。而圖片、視頻這些二進(jìn)制文件,雖然也能由版本控制系統(tǒng)管理,但是卻補(bǔ)能跟蹤二進(jìn)制文件的細(xì)致改動(dòng),只能把二進(jìn)制文件每次串起來,也就是只知道圖片或視頻從100KB改成了200KB,但是到底改了啥,版本控制系統(tǒng)不知道,也沒辦法知道。
新建文件添加到本地倉庫:git add、git commit -m
add:將文件添加到緩存區(qū)
commit:提交到本地倉庫
- 在工作區(qū)創(chuàng)建一個(gè)文件readme.txt
在工作區(qū)創(chuàng)建一個(gè)文件
touch readme.txt (linux中的新建文件命令)vim readme.txt #編輯該文件
在文件里寫入一句話:
- 將文件提交到本地git版本倉庫中
- 首先:使用git add命令將文件添加到本地倉庫的提交緩存(也就是提交到暫存區(qū)):
git add readme.txt
這個(gè)時(shí)候還不算添加到了本地倉庫,我們還需要使用git commit命令為其添加修改的描述信息 - 使用git commit命令為其添加修改的描述信息:(完成后,就將文件提交到了倉庫中了)
注意在使用git commit時(shí)我們只需要簡(jiǎn)單描述一下我們做了什么,不要像寫注釋那樣寫一大堆,不然將來在回滾代碼或者查看歷史版本時(shí),很難審閱。
我們需要使用-m
選項(xiàng)來簡(jiǎn)寫描述我們的信息,如果不使用-m,會(huì)調(diào)用終端的注釋編輯器讓你輸入描述信息,但是不建議使用,因?yàn)樽⑨尵庉嬈鞅容^難用,不舒服。
git commit -m "add new file"
- git commit 會(huì)為我們生成40位的哈希值,用于作為id,并把剛剛用git add添加到提交緩存區(qū)里的文件提交到本地倉庫中,便于我們回滾,至此,這個(gè)文件就已經(jīng)添加到本地倉庫中了,同時(shí)本地倉庫也迭代了一個(gè)版本。
- 首先:使用git add命令將文件添加到本地倉庫的提交緩存(也就是提交到暫存區(qū)):
查看歷史提交日志:git log
第一行的commit是哈希算法算出的id
Author是提交者是誰的意思,顯示格式是:用戶名 <郵箱>
Date的意思是提交時(shí)間,后面的+0800這個(gè)是格林尼治時(shí)間,代表當(dāng)前是以哪兒的時(shí)間地作為基準(zhǔn),這是世界時(shí)間,用它來作為基數(shù)與當(dāng)前所在地時(shí)差進(jìn)行計(jì)算,包括地球自轉(zhuǎn)等公式。
最下面的就是注釋了,就是我們?cè)?code>git commit時(shí)添加的描述信息。
查看.git目錄
我們可以看到,當(dāng)我們將文件添加到本地倉庫后,我們的.git
目錄和文章開頭相比,就發(fā)生了變化。
還是這副圖:
首先是index文件
:我們?cè)谏弦黄姓f到的暫存區(qū),就是這個(gè)文件,我們add
就是先將文件添加到暫存區(qū)中(注意:不是將文件實(shí)體添加到暫存區(qū)中,暫存區(qū)存的是文件的索引,真正的文件實(shí)體在Git 對(duì)象庫
(.git/objects
)中)。
HEAD文件
: 我們?cè)谏掀岬健癏EAD” 實(shí)際是指向 master 分支的一個(gè)“游標(biāo)”,我們可以查看一下HEAD指針是不是指向master的。
可以看到是指向master的。
我們可以查看一下master文件下存放的是什么內(nèi)容:
是一串字符串,我們有沒有覺得這一串字符串很熟悉呢?
其實(shí)就是我們最近一次提交的commit ID,這里我們就可能需要驗(yàn)證一下了,是只記錄最近一次,還是存放所有提交的ID,因?yàn)槲覀兡壳爸碧峤涣艘粋€(gè)文件,接下來我們多提交幾個(gè)文件試試。
我們又想本地倉庫中添加了兩個(gè)文件,這是我們?cè)偃タ纯磎aster中存放的是什么:
從這我們就可以發(fā)現(xiàn),僅僅是存放最近一次提交的commit ID。
我們要知道,不管是index暫存區(qū)還是master分支,這兩個(gè)目錄樹存放的都是文件實(shí)體索引,而實(shí)體又存放在Git 對(duì)象庫
(.git/objects
)中),那我們來看看object文件該怎么看:
其實(shí)這就里面就代表每個(gè)對(duì)象,那該怎么去看呢?其實(shí)很簡(jiǎn)答。
還是看commit ID,
ID的前兩位是文件名(也就是文件夾的名稱),所以我們就可以很快找到我們添加到倉庫中的文件:
那我們既然找到他了,那我們來看看這個(gè)對(duì)象里具體有什么東西,這時(shí)我們不能再使用cat
l來進(jìn)行查看了。用以下命令:
git cat-file -p commitID
例如:
我們查看到里面存放的是這些信息。我們可以觀察到除了第一行的tree我們不知道是什么外,其他的我們都知道是什么。
patent: 是我們上一次提交的commitID,然后就是提交的用戶郵箱,最后就是本對(duì)象提交時(shí)打印的描述信息。
那我們來看看 tree 里是什么:
可以看到里面存放的就是我們提交的文件,而每一個(gè)文件也都有自己的索引。
我們可以查看一下其中一個(gè)內(nèi)容:
其實(shí)這里面就存放的是我們修改文件的內(nèi)容
補(bǔ)充上文add與log的內(nèi)容:
git add --all
git add .
git add --all
命令會(huì)將當(dāng)前目錄下包括子目錄下所有改動(dòng)的文件提交到暫存區(qū),注意只包括改動(dòng)的文件,不改動(dòng)的不會(huì)放到緩存區(qū)。
這個(gè)命令還會(huì)把刪除的文件也提交進(jìn)去
如你在本地刪除了min.c ,這個(gè)命令會(huì)把刪除信息也記錄進(jìn)去,然后在提交的時(shí)候把倉庫里對(duì)應(yīng)的min.c也刪除掉,也就是說你在本地做的刪除操作會(huì)被記錄,提交倉庫時(shí)會(huì)刪除同樣的文件,如果不想刪除文件,可以使用git add .
,注意后面有一個(gè)“.”點(diǎn)的符號(hào),這個(gè)命令跟git add --all一樣,但是不會(huì)記錄刪除操作。
只要對(duì)文件進(jìn)行了修改,那我們就需要重新 git add,不然只是在工作區(qū)中修改,倉庫中還是原來的版本
最后別忘記使用git commit提交到倉庫中
git log --pretty=oneline
我們?cè)谑褂?code>git log命令看歷史記錄時(shí),會(huì)打印以下信息:
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline
參數(shù)
git status
可以查看當(dāng)前倉庫狀態(tài)。
比如我對(duì)某個(gè)倉庫里的文件,進(jìn)行了修改,那我們就可以使用這個(gè)命令進(jìn)行狀態(tài)查看,或者我們?cè)谙騻}庫中添加新的文件時(shí),也可以使用這個(gè)命令進(jìn)行查看狀態(tài)。
例如:
我們對(duì)一開始創(chuàng)建的readme.txt文件內(nèi)容進(jìn)行添加以下內(nèi)容:
我們對(duì)文件進(jìn)行修改后,使用git status
來查看此時(shí)倉庫狀態(tài)。
這里很明確的提示咱們,修改的文件時(shí)哪個(gè)文件,而且只是在工作區(qū)進(jìn)行了修改,并沒有進(jìn)行提交到暫存區(qū)中。
注意: 我們使用git status
命令只能查看哪個(gè)文件被修改,并不能查看具體文件修改的內(nèi)容。
查看被修改的內(nèi)容:
命令:
git diff filename
例如:
對(duì)上述進(jìn)行一下解析:
那我們進(jìn)行提交到暫存區(qū)后看看。
此時(shí)我們就可以看到有個(gè)修改文件提交到了暫存區(qū)。
當(dāng)我們提交到倉庫中之后,在使用git status查看,則表示沒有需要提交的文件了