git拉取单个目录/文件 -- 避免每次都要下拉全部代码

做开发的时候总是因为一起开发的同学改了代码就导致需要重拉全部代码,导致本地一些注释后才能不报错的代码也被更新了,在本地进行单测时,还得去一个个手动注释掉才不报错(某些特定功我没配环境,也用不到)

在网上查了一下,单独更新某个目录or文件可以利用git的“sparse checkout”方法(设置稀疏检出)来实现

设置sparse checkout模式,允许克隆子目录

基础

 

git config core.sparsecheckout true

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

此时会在sparse-checkout文件中追加xxx/xxx

 

echo xxx/xxx >> .git/info/sparse-checkout

如何关闭sparse checkout

如果要关闭 sparse checkout功能,仅仅修改设置,将core.sparsecheckout设为false是不生效的,需要修改 .git/info/sparse-checkout 文件,用一个”*“号替代其中的内容,然后执行 checkout 或 read-tree 命令。

git read-tree -mu HEAD --

git read-tree -mu HEAD 是 Git 命令中的一个操作,用于将当前工作区与指定的树对象(tree object)进行合并。

  • git read-tree 是一个低级的 Git 命令,用于将一个树对象的内容读取到当前的索引(index)中。

  • -m 选项用于告诉 Git 在合并时保持工作区的修改。如果不使用 -m 选项,则 Git 会覆盖工作区中的文件,将其恢复为与树对象一致的状态。使用 -m 选项后,Git 会尝试将树对象和工作区的修改进行合并。

  • -u 选项用于更新已经在索引中的条目。这表示 Git 将会更新已经跟踪的文件和目录的状态,将其与树对象中的内容进行合并。

  • HEAD 是一个引用,表示当前分支的最新提交。在这里,git read-tree -mu HEAD 将会以当前分支的最新提交(HEAD)所指向的树对象为基础,将其内容读取到索引中,并尝试将索引中的内容与工作区的修改进行合并。

这条命令通常在需要将索引中的内容与当前分支最新提交的内容进行合并时使用,尤其是在需要保留工作区修改的情况下。


浅克隆

如果只拉取最近一次的变更,忽略以前的变更记录,在拉取时可以加参数depth,如git pull --depth=1 origin master

Chatgpt的详细解答:


git pull --depth=1 origin master 是 Git 命令的一部分,用于从远程仓库(通常是指定的 origin)拉取最新的提交并将其合并到本地仓库的当前分支(通常是 master 分支)。这里的 --depth=1 参数指定了拉取的深度,即仅拉取最新的一次提交,不包括历史记录。

分析命令中的各部分:

  • git pull: 这是一个组合命令,相当于执行了 git fetchgit merge 两个步骤,用于从远程仓库获取最新的提交并将其合并到本地分支。

  • --depth=1: 这是一个选项参数,指定了拉取的深度。在这里设置为 1,表示只拉取最新的一次提交,不包括历史记录。这可以加快拉取速度,尤其是当历史记录非常庞大时。

  • origin: 这是远程仓库的名称,默认情况下指向你的远程 Git 仓库地址。

  • master: 这是指定从远程仓库的 master 分支拉取最新提交。

浅克隆(Shallow Clone)通常在以下情况下使用:

  1. 项目历史过于庞大: 如果远程仓库的历史记录非常庞大,而你只对最新的提交感兴趣,那么可以使用浅克隆来减少克隆时间和存储空间。

  2. 仅需最新代码: 当你只需要最新的代码而不需要整个历史记录时,例如只需查看、测试最新的功能或修复,那么浅克隆就是一个很好的选择。

  3. 网络带宽受限: 在网络带宽受限的环境下,例如在网络速度较慢的情况下,浅克隆可以节省时间和带宽成本。

总之,浅克隆提供了一种快速获取最新代码的方式,尤其适用于只需要关注最新提交的场景。


sparse-checkout 文件设置

子目录的匹配在 sparse-checkout 文件中,

如果目录名称前带斜杠,如/docs/,将只匹配项目根目录下的docs目录,如果目录名称前不带斜杠,如docs/,

其他目录下如果也有这个名称的目录,如test/docs/也能被匹配。

而如果写了多级目录,如docs/05/,则不管前面是否带有斜杠,都只匹配项目根目录下的目录,如test/docs/05/不能被匹配。

通配符 ““ (星号)在 sparse-checkout 文件中,支持通配符 ““,如可以写成以下格式

排除项

很像 .gitignore的写法

要注意一点:如果要关闭sparsecheckout功能,全取整个项目库,可以写一个”“号,但如果有排除项,必须写”/“,同时排除项要写在通配符后面。

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

实测时发现,不在sparse-checkout的文件,pull 是不会拉取了,但是添加还是会默认添加的


参考https://www.jianshu.com/p/b6c61907049f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值