我启用了稀疏结帐
git init
git remote add <url>
git config --global core.sparseCheckout true
echo "assets" >> .git/info/sparse-checkout
git pull origin master
Git只检查了我的资产文件夹
但是现在,我想再次启用完整的分支机构检查(结帐文件夹/文件),但它似乎不起作用。
1)首先我禁用了配置
git config --global core.sparseCheckout false
2)删除.git / info / sparse-checkout
中的条目但git没有为我检查任何其他文件夹/文件,似乎它正在粘贴'assets'文件夹。
有人能告诉我如何在不创建新回购的情况下重置/禁用此稀疏结账。?
答案 0 :(得分:14)
您可以看到&#34;撤消&#34;的示例Roscoe A. Bartlett的稀疏结账in this script:
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
文章&#34; Adventures in Git - SparseCheckouts&#34; Rich Somerfield提出了一个类似的选项(对子模块也有效):
echo "/*" > .git/info/sparse-checkout
echo "/*" > .git/modules/<MODULEPATH>/info/sparse-checkout
git read-tree -mu HEAD
git config core.sparseCheckout false
braham-snyder添加in the comments 更新 a .git/info/sparse-checkout
(以结帐和跟踪其他文件)可以通过
git read-tree --dry-run HEAD
答案 1 :(得分:10)
虽然VonC的答案肯定是正确的,并且有助于解决即将发生的问题,但我觉得有必要详细说明并解释潜在的问题。
Git&#39; sparse-checkout
使用skip-worktree
bit,它基本上告诉git将您工作目录中的文件视为&#34;最新&#34;,无论真实的状态。
使用sparse-checkout
时,git会将此位应用于与sparse-checkout
文件中描述的模式不匹配的所有文件。禁用sparse-checkout
或删除模式文件时,仍将设置此位并且文件不会返回。 You can read about it here.
因此,您必须从相关文件中手动删除skip-worktree
位。最简单的方法当然是VonC的建议。
这背后的原因非常简单。 skip-worktree
位并非专门用于sparse-checkout
,而是git工具包中的工具。其他进程使用相同的位,或者用户甚至可以使用它自己的(我个人经常使用它来忽略调试时对配置文件的更改)。
在旁注:您实际上可以使用skip-worktree
获取已使用git ls-files -v
位标记的文件列表。这将列出版本控制下的所有文件; skip-worktree
位的文件前缀为S
。
如果您只想列出skip-worktree
标记的文件,您可以使用以下命令轻松解析并grep该列表:git ls-files -v | grep '^S' | cut -d' ' -f2
。
答案 2 :(得分:1)
虽然从git 2.27开始仍处于试验阶段,但是现在有一个命令可以更透明/更直观地处理此问题:
git sparse-checkout disable
我的理解是,您不必再手动设置core.sparseCheckout
,应该使用此新的git sparse-checkout
命令启用,配置和禁用它。