Git拉取指定文件或者文件夹

Git稀疏检出:高效获取项目指定文件
本文介绍了如何在Git中使用sparse checkout模式,仅克隆和拉取项目中需要的特定文件或目录,避免不必要的资源消耗。步骤包括设置sparse checkout、配置文件、拉取指定分支,并提到了相关注意事项和操作技巧。

在进行项目开发的时候,有时候会有这样的需求那就是:
我们只希望从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将所有信息都取回到本地,即相当于在你的机器上生成一个克隆版的版本库。因此在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Check Out指定文件或者文件夹成为可能。

仓库只有一个的情况下,只想拉取某个目录文件;其他文件没用到的会很浪费时间;

关键:git的sparse checkout模式
在这里插入图片描述

理论

github.io
“Sparse checkout” 允许稀疏地填充工作目录。它使用 skip-worktree(参见git-update-index(1))告诉 Git 工作目录上的文件是否值得查看。

git read-tree”和其他基于合并的命令(“git merge”、“git checkout”……)可以帮助维护跳过工作树位图和工作目录更新。$GIT_DIR/info/sparse-checkout用于定义跳过工作树参考位图。当“git read-tree”需要更新工作目录时,它会根据这个文件重新设置索引中的skip-worktree位,它使用与.gitignore文件相同的语法。如果条目与此文件中的模式匹配,则会在该条目上设置 skip-worktree。否则 skip-worktree 将被取消设置。
然后它将新的跳过工作树值与前一个值进行比较。如果 skip-worktree 从 unset 变为 set,它将添加相应的文件。如果它从设置变为未设置,则该文件将被删除。

虽然$GIT_DIR/info/sparse-checkout通常用于指定哪些文件在其中。您还可以使用否定模式指定哪些文件不在其中。例如,要删除“不需要的”文件:

* 
!不需要的

另一个棘手的事情是当您不再需要sparse checkout完全重新填充工作目录。您不能只禁用“sparse_checkout”,因为 skip-worktree 仍在索引中,并且您的工作目录仍然很少填充。您应该使用$GIT_DIR/info/sparse-checkout文件内容重新填充工作目录,如下所示:

*

然后您可以禁用Sparse_checkout。默认禁用“git read-tree”和类似命令中的Sparse checkout支持。您需要打开core.sparseCheckout以获得Sparse checkout支持

大致步骤

1,本地新建文件夹或者执行命令

mkdir project && cd project

2,目录初始化

git init

3,设置远程仓库地址(将本地仓库关联到远程仓库)

git remote add -f origin <origin_url>

4,设置sparse checkout模式(稀疏检出),允许克隆子目录

git config core.sparsecheckout true		//config:参数是用来配置git环境的
# 上面的代码会帮助我们创建一个空的本地仓库,同时将远程Git Server URL加入到Git Config文件中。

5,设置指定拉取的目录( *是通配符,!是反选;例如 clients/ 表示clients目录下所有)

echo 你要的文件名/目录 >> .git/info/sparse-checkout

6,拉取

git pull origin master
# 解释
push:将本地仓库与远程仓库合并
-u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支。
不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支
origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项
master:提交本地matser分支仓库

注意: fatal: Couldn’t find remote ref master;

表示主线名称不是master,可以通过分支命令查看git branch -a
git branch -a
remotes/origin/main
根据上面提示,主线名称是main,则执行
git pull origin main

7,删除本地仓库(.git文件就不在了)

 rm -rf .git

8,track本地远程相同命名
如果远程新建了一个分支,本地没有该分支。
可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

git的本地分支关联远程分支(remtotes/origin/news为远程分支名称)

git branch --set-upstream-to remotes/origin/news

9,fetch本地自定义命名
例如:将gitLab 上的dev分支拉取到本地

与远程仓库建立连接:git remote add origin XXXXX.git

使用git branch 查看本地是否具有dev分支

如果没有 git fetch origin dev

git checkout -b dev origin/dev在本地创建分支dev并切换到该分支

git pull origin dev就可以把gitLab上dev分支上的内容都拉取到本地了

10,git回退版本

git log q					退出查看
git reset --hard XXXX 		加上目标版本号命令将版本回退
git push -f -u origin XXX 	提交到指定分支

There’s no need for everyone to agree with you, and there’s no need to go on and on about yourself

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值