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)文章
Alfred?+?Gitee搭建免費(fèi)圖床的使用實(shí)例詳解
這篇文章主要為大家介紹了Alfred?+?Gitee搭建免費(fèi)圖床的使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
ffmpeg網(wǎng)頁視頻流m3u8 ts實(shí)現(xiàn)視頻下載
這篇文章主要為大家介紹了ffmpeg網(wǎng)頁視頻流m3u8 ts實(shí)現(xiàn)視頻下載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
如何使用VSCode 運(yùn)行調(diào)試插件代碼
這篇文章主要介紹了如何使用VSCode 運(yùn)行調(diào)試插件代碼的相關(guān)資料,需要的朋友可以參考下2020-01-01

