Git只獲取部分目錄的內(nèi)容(稀疏檢出)

公司的開發(fā)從SVN切換到Git,在SVN下,可以很方便的只獲取版本庫中一個(gè)或多個(gè)目錄的內(nèi)容,但是Git的克隆,默認(rèn)是直接拉取整個(gè)遠(yuǎn)程倉庫,如果項(xiàng)目比較大,大量和自己無關(guān)的內(nèi)容也會拉到本地,占用很多硬盤空間。
在網(wǎng)上搜了一下,Git在1.7版本后,已經(jīng)支持只Checkout部分內(nèi)容,這個(gè)功能叫做 sparse checkout(稀疏檢出)。

開啟

git config core.sparsecheckout true

Paste_Image.png

寫入要獲取的文件

echo "BATInterview" >> .git/info/sparse-checkout
只拉取BATInterview文件夾

此時(shí)會在sparse-checkout文件中追加


Paste_Image.png

如果以后修改了 .git/info/sparse-checkout,增加或刪除部分目錄,可以執(zhí)行如下命令重新Checkout
$ git checkout master

或執(zhí)行以下命令:
$ git read-tree -mu HEAD

要關(guān)閉 sparse checkout功 能,

僅僅修改設(shè)置,將core.sparsecheckout設(shè)為false是不生效的,需要修改 .git/info/sparse-checkout 文件,用一個(gè)”*“號替代其中的內(nèi)容,然后執(zhí)行 checkout 或 read-tree 命令。

(淺克隆)

如果只拉取最近一次的變更,忽略以前的變更記錄,在拉取時(shí)可以加參數(shù)depth,如git pull --depth=1 origin master

已經(jīng)建了版本庫

如果本地已經(jīng)建了版本庫,要使用這個(gè)功能,可以進(jìn)入版本庫的目錄,執(zhí)行以下命令


$ git config core.sparsecheckout true
$ echo "path1/" >> .git/info/sparse-checkout
$ echo "path2/" >> .git/info/sparse-checkout
$ git checkout master

sparse-checkout 文件設(shè)置

子目錄的匹配在 sparse-checkout 文件中,如果目錄名稱前帶斜杠,如/docs/
,將只匹配項(xiàng)目根目錄下的docs目錄,如果目錄名稱前不帶斜杠,如docs/
,其他目錄下如果也有這個(gè)名稱的目錄,如test/docs/
也能被匹配。而如果寫了多級目錄,如docs/05/
,則不管前面是否帶有斜杠,都只匹配項(xiàng)目根目錄下的目錄,如test/docs/05/
不能被匹配。
通配符 ““ (星號)在 sparse-checkout 文件中,支持通配符 ““,如可以寫成以下格式:

*docs
/index.*
*.gif

排除項(xiàng)

“!” (感嘆號)在 sparse-checkout 文件中,也支持排除項(xiàng) “!”,如只想排除排除項(xiàng)目下的 “docs” 目錄,可以按如下格式寫:

/*
!/docs/

很像 .gitignore的寫法

要注意一點(diǎn):如果要關(guān)閉sparsecheckout功能,全取整個(gè)項(xiàng)目庫,可以寫一個(gè)”“號,但如果有排除項(xiàng),必須寫”/“,同時(shí)排除項(xiàng)要寫在通配符后面。

參考:https://zhgcao.github.io/2016/05/11/git-sparse-checkout/

實(shí)測時(shí)發(fā)現(xiàn),不在sparse-checkout的文件,pull 是不會拉取了,但是添加還是會默認(rèn)添加的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容