Git拉取指定文件或者文件夾的實(shí)現(xiàn)方式
Git拉取指定文件或者文件夾
在進(jìn)行項(xiàng)目開發(fā)的時(shí)候,有時(shí)候會(huì)有這樣的需求那就是:
我們只希望從Git倉庫里取指定的文件或者文件夾出來。在SVN里面,這非常容易實(shí)現(xiàn),因?yàn)镾VN基于文件方式存儲(chǔ),而Git卻是基于元數(shù)據(jù)方式分布式存儲(chǔ)文件信息的,它會(huì)在每一次Clone的時(shí)候?qū)⑺行畔⒍既』氐奖镜兀聪喈?dāng)于在你的機(jī)器上生成一個(gè)克隆版的版本庫。因此在Git1.7.0以前,這無法實(shí)現(xiàn),但是幸運(yùn)的是在Git1.7.0以后加入了Sparse Checkout模式,這使得Check Out指定文件或者文件夾成為可能。
倉庫只有一個(gè)的情況下,只想拉取某個(gè)目錄文件;其他文件沒用到的會(huì)很浪費(fèi)時(shí)間;
關(guān)鍵:git的sparse checkout模式

理論
“Sparse checkout” 允許稀疏地填充工作目錄。它使用 skip-worktree 位(參見git-update-index(1))告訴 Git 工作目錄上的文件是否值得查看。
“git read-tree”和其他基于合并的命令(“git merge”、“git checkout”……)可以幫助維護(hù)跳過工作樹位圖和工作目錄更新。$GIT_DIR/info/sparse-checkout用于定義跳過工作樹參考位圖。當(dāng)“git read-tree”需要更新工作目錄時(shí),它會(huì)根據(jù)這個(gè)文件重新設(shè)置索引中的skip-worktree位,它使用與.gitignore文件相同的語法。如果條目與此文件中的模式匹配,則會(huì)在該條目上設(shè)置 skip-worktree。否則 skip-worktree 將被取消設(shè)置。
然后它將新的跳過工作樹值與前一個(gè)值進(jìn)行比較。如果 skip-worktree 從 unset 變?yōu)?set,它將添加相應(yīng)的文件。如果它從設(shè)置變?yōu)槲丛O(shè)置,則該文件將被刪除。
雖然$GIT_DIR/info/sparse-checkout通常用于指定哪些文件在其中。您還可以使用否定模式指定哪些文件不在其中。
例如,要?jiǎng)h除“不需要的”文件:
* !不需要的
另一個(gè)棘手的事情是當(dāng)您不再需要sparse checkout完全重新填充工作目錄。
您不能只禁用“sparse_checkout”,因?yàn)?skip-worktree 仍在索引中,并且您的工作目錄仍然很少填充。
您應(yīng)該使用$GIT_DIR/info/sparse-checkout文件內(nèi)容重新填充工作目錄,如下所示:
*
然后您可以禁用Sparse_checkout。默認(rèn)禁用“git read-tree”和類似命令中的Sparse checkout支持。
您需要打開core.sparseCheckout以獲得Sparse checkout支持
大致步驟:
1.本地新建文件夾或者執(zhí)行命令
mkdir project && cd project
2.目錄初始化
git init
3.設(shè)置遠(yuǎn)程倉庫地址(將本地倉庫關(guān)聯(lián)到遠(yuǎn)程倉庫)
git remote add -f origin <origin_url>
4.設(shè)置sparse checkout模式(稀疏檢出),允許克隆子目錄
git config core.sparsecheckout true //config:參數(shù)是用來配置git環(huán)境的 # 上面的代碼會(huì)幫助我們創(chuàng)建一個(gè)空的本地倉庫,同時(shí)將遠(yuǎn)程Git Server URL加入到Git Config文件中。
5.設(shè)置指定拉取的目錄( *是通配符,!是反選;例如 clients/ 表示clients目錄下所有)
echo 你要的文件名/目錄 >> .git/info/sparse-checkout
6.拉取
git pull origin master # 解釋 push:將本地倉庫與遠(yuǎn)程倉庫合并 -u:將本地倉庫分支與遠(yuǎn)程倉庫分支一起合并,就是說將master的分支也提交上去,這樣你就可以在遠(yuǎn)程倉庫上看到你在本地倉庫的master中創(chuàng)建了多少分支。 不加這個(gè)參數(shù)只將當(dāng)前的master與遠(yuǎn)程的合并,沒有分支的歷史記錄,也不能切換分支 origin:遠(yuǎn)程倉庫的意思,如果這個(gè)倉庫是遠(yuǎn)程的那么必須使用這個(gè)選項(xiàng) master:提交本地matser分支倉庫
注意: fatal: Couldn’t find remote ref master;
表示主線名稱不是master,可以通過分支命令查看git branch -a git branch -a remotes/origin/main 根據(jù)上面提示,主線名稱是main,則執(zhí)行 git pull origin main
7.刪除本地倉庫(.git文件就不在了)
rm -rf .git
8.track本地遠(yuǎn)程相同命名
如果遠(yuǎn)程新建了一個(gè)分支,本地沒有該分支。
可以利用 git checkout --track origin/branch_name ,這時(shí)本地會(huì)新建一個(gè)分支名叫 branch_name ,會(huì)自動(dòng)跟蹤遠(yuǎn)程的同名分支 branch_name。
git的本地分支關(guān)聯(lián)遠(yuǎn)程分支(remtotes/origin/news為遠(yuǎn)程分支名稱)
git branch --set-upstream-to remotes/origin/news
9.fetch本地自定義命名
例如:將gitLab 上的dev分支拉取到本地
- 與遠(yuǎn)程倉庫建立連接:git remote add origin XXXXX.git
- 使用git branch 查看本地是否具有dev分支
- 如果沒有 git fetch origin dev
- git checkout -b dev origin/dev在本地創(chuàng)建分支dev并切換到該分支
- git pull origin dev就可以把gitLab上dev分支上的內(nèi)容都拉取到本地了
10.git回退版本
git log q 退出查看 git reset --hard XXXX 加上目標(biāo)版本號(hào)命令將版本回退 git push -f -u origin XXX 提交到指定分支
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你學(xué)會(huì)HBuilder打包APP
我們打包APP需要用到HBuilder,所以本文主要介紹了HBuilder下載安裝以及如何使用,最后介紹如何打包app,感興趣的可以了解一下2021-06-06
詳解scratch3.0二次開發(fā)之scratch-blocks中的blocks的類型、定義和使用方法
scratch-blocks是scratch-gui依賴的一個(gè)基本模塊,blocks的作用是通過拖曳的方法組成blocks堆塊,今天通過本文給大家分享scratch3.0二次開發(fā)之scratch-blocks的免編譯修改方法,感興趣的朋友一起看看吧2021-08-08
微信 小程序開發(fā)環(huán)境搭建詳細(xì)介紹
這篇文章主要介紹了微信 小程序開發(fā)環(huán)境搭建詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-09-09
安全校驗(yàn)Session驗(yàn)證碼并避免繞開驗(yàn)證碼攻擊
校驗(yàn)驗(yàn)證碼的Session是否為空或者校驗(yàn)用戶輸入的驗(yàn)證碼是否合法,構(gòu)造安全表單的關(guān)鍵就是永遠(yuǎn)不要相信用戶的輸入2012-01-01
詳解idea中Git的Stash Changes和UnStash Changes用法
這篇文章主要介紹了idea中Git的Stash Changes和UnStash Changes用法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Sublime將數(shù)據(jù)json格式化的操作方法
這篇文章主要介紹了Sublime將數(shù)據(jù)json格式化的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
使用 Conditional Menus 插件讓 WordPress 在不同頁面顯示不同菜單
這篇文章主要介紹了如何使WordPress在不同頁面顯示不同菜單2021-09-09

