启用后如何禁用稀疏结账?

iam*_*olo 12 git

我启用了稀疏结账

git init
git remote add <url>
git config --global core.sparseCheckout true
echo "assets" >> .git/info/sparse-checkout
git pull origin master
Run Code Online (Sandbox Code Playgroud)

Git只为我检查了资产文件夹

但是现在,我想再次启用完整的分支机构检查(签出文件夹/文件),但它似乎不起作用.

1)首先我禁用了配置

git config --global core.sparseCheckout false
Run Code Online (Sandbox Code Playgroud)

2)删除.git/info/sparse-checkout中的条目

但git没有为我检查任何其他文件夹/文件,似乎它坚持'资产'文件夹.

谁能告诉我如何在不创建新仓库的情况下重置/禁用此稀疏结账.

Von*_*onC 15

你可以看到Roscoe A. Bartlett 在这个剧本中"撤消"稀疏结账的例子:

git read-tree 很重要

echo "Undoing sparse checkout"

# Get the full tree back
echo "*" > $SC_FILE
git config core.sparsecheckout true
git read-tree --reset -u HEAD

# Wipe out all traces of sparse checkout support
rm $SC_FILE
git config core.sparsecheckout false
Run Code Online (Sandbox Code Playgroud)

Rich Somerfield 撰写的文章" Aditures in Git - SparseCheckouts " 提出了一个类似的选项(对子模块也有效):

echo "/*" > .git/info/sparse-checkout
echo "/*" > .git/modules/<MODULEPATH>/info/sparse-checkout
git read-tree -mu HEAD
git config core.sparseCheckout false
Run Code Online (Sandbox Code Playgroud)

布拉汉姆施奈德增加在评论更新一个.git/info/sparse-checkout(检出和跟踪其他文件)可以与实现

git read-tree --dry-run HEAD
Run Code Online (Sandbox Code Playgroud)


Sas*_*olf 10

虽然VonC的答案肯定是正确的并且将有助于解决迫在眉睫的问题,但我觉得有必要详细说明并解释潜在的问题.

背景

Git sparse-checkout使用该skip-worktree,它基本上告诉git将工作目录中的文件视为"最新",而不管真实状态如何.

使用sparse-checkoutgit时,会将此位应用于与文件中描述的模式不匹配的所有sparse-checkout文件.禁用sparse-checkout或删除模式文件时,仍会设置此位并且文件不会返回.你可以在这里读到它.

因此,您必须skip-worktree从相关文件中手动删除该位.最简单的方法当然是VonC的建议.

但为什么?

这背后的原因很简单.该skip-worktree位并非专门用于sparse-checkout它,而是git工具箱中的一个工具.其他进程使用相同的位,或者用户甚至可以使用它自己的(我个人经常使用它来忽略调试时对配置文件的更改).


旁注:通过使用,您实际上可以获得已用该skip-worktree位标记的文件列表git ls-files -v.这将列出版本控制下的所有文件; 带有skip-worktree位的文件以a为前缀S.

如果您只想列出已skip-worktree标记的文件,可以使用以下命令轻松解析并grep该列表:git ls-files -v | grep '^S' | cut -d' ' -f2.


Tao*_*Tao 9

虽然从 git 2.27 开始它仍然处于实验阶段,但现在有一个命令可以更透明/直观地处理这个问题:

git sparse-checkout disable
Run Code Online (Sandbox Code Playgroud)

我的理解是,您不必core.sparseCheckout再手动设置,应该使用这个新命令来启用、配置和禁用它git sparse-checkout

https://git-scm.com/docs/git-sparse-checkout