赞
踩
做开发的时候总是因为一起开发的同学改了代码就导致需要重拉全部代码,导致本地一些注释后才能不报错的代码也被更新了,在本地进行单测时,还得去一个个手动注释掉才不报错(某些特定功我没配环境,也用不到)
在网上查了一下,单独更新某个目录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功能,仅仅修改设置,将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 fetch
和 git merge
两个步骤,用于从远程仓库获取最新的提交并将其合并到本地分支。
--depth=1
: 这是一个选项参数,指定了拉取的深度。在这里设置为 1
,表示只拉取最新的一次提交,不包括历史记录。这可以加快拉取速度,尤其是当历史记录非常庞大时。
origin
: 这是远程仓库的名称,默认情况下指向你的远程 Git 仓库地址。
master
: 这是指定从远程仓库的 master
分支拉取最新提交。
浅克隆(Shallow Clone)通常在以下情况下使用:
项目历史过于庞大: 如果远程仓库的历史记录非常庞大,而你只对最新的提交感兴趣,那么可以使用浅克隆来减少克隆时间和存储空间。
仅需最新代码: 当你只需要最新的代码而不需要整个历史记录时,例如只需查看、测试最新的功能或修复,那么浅克隆就是一个很好的选择。
网络带宽受限: 在网络带宽受限的环境下,例如在网络速度较慢的情况下,浅克隆可以节省时间和带宽成本。
总之,浅克隆提供了一种快速获取最新代码的方式,尤其适用于只需要关注最新提交的场景。
子目录的匹配在 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 是不会拉取了,但是添加还是会默认添加的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。