在Windows的Git中出现了错误:“error: Sparse checkout leaves no entry on the working directory”

30

我遇到了这个错误:

“error: Sparse checkout leaves no entry on the working directory”

在尝试在Windows上设置Git中的稀疏检出时,经过调查并发现完整答案分散在Web上后,我回答了自己的问题。

2个回答

67

简短版

从您希望源代码存在的文件夹中,使用git-bash提示符而不是powershell(尽管请参见我的下面的编辑):

git clone –n <repo> <local-directory-name>
cd <local-directory-name>
git config core.sparsecheckout true
echo some/sub-folder/you/want >> .git/info/sparse-checkout
git checkout <branch-name>

全面解释

稀疏检出使您能够在存储库的子集上工作。在大型存储库上设置稀疏检出是值得的,因为一切都更快!

我曾经在 Windows 上遇到了很多问题,“error: Sparse checkout leaves no entry on the working directory”。经过一番研究,我发现以下步骤最简单,并且对我而言始终有良好的结果 - 不保证适用于所有情况。

最重要的一点是 - 不要使用 PowerShell/CMD 进行这些步骤 - 使用 git bash 提示符。否则,echo 命令会生成一个带有 BOM 标记的 UNICODE 文件。该文件必须是 ANSI 格式的文件,具有 UNIX 风格的行结尾,以便 Git 正确解析它。这很可能是“error: Sparse checkout leaves no entry on the working directory”错误的原因。

  1. 从您希望成为根文件夹的父文件夹开始,假设文件夹名称为“src”,请执行以下操作。这将获取整个仓库(仍然需要),但重要的是不执行检出,并正确设置了远程源和分支跟踪。

git clone –n <your repository> src
  • 您的src文件夹应该看起来相对空洞(它将有.git隐藏文件夹)。现在运行以下命令。此更新本地git配置以打开稀疏检出,并创建一个文件在.git/info隐藏文件夹中,其中将列出在进行稀疏检出时要包括的所有文件夹。稍后可以编辑此文件以添加其他文件夹。重要提示:请确保使用git bash提示符,并使用支持unix行结束约定并保存为ANSI格式的编辑器编辑sparse-checkout文件,否则可能会出现“错误:Sparse checkout leaves no entry on the working directory”错误信息。 <path you want to checkout>可能是这样的:path/to/subfolder - 注意缺少前导和尾随路径分隔符。

  • cd src
    git config core.sparsecheckout true
    echo <path you want to checkout> >> .git/info/sparse-checkout
    
  • 现在您已经准备好结账了。这应该只留下sparse-checkout文件夹中的内容。如果没有,仔细检查上面的所有拼写!

  • git checkout <branch-name>
    

    编辑 - Powershell 中的回显

    最近我发现,在Powershell中,echo是write-output的同义词。可以通过将echo导管到out-file命令来获取ASCII输出,该命令允许指定编码方式。因此,这将在Powershell中起作用并提供正确的文件内容:

    echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
    

    6
    永远不要相信任何带有“Power”一词的东西。 - Stephan Kristyn
    2
    另一种解决方案是使用git客户端自带的echo命令。这就是我的解决方法:%GITHOME%\usr\bin\echo.exe <您想要检出的路径> >> .git/info/sparse-checkout - Lafleur
    这仍然会导致创建"want"文件夹,有没有办法阻止这种情况发生?我尝试使用"path/you/want/*",但是仍存在相同的问题。 - Jason Lawton
    不清楚你想要什么。创建“want”文件夹是本意。稀疏检出过滤检出,而不是重新定位它们。 - James World
    Out-File -encoding 更可靠的是将其替换为 Set-Content -Encoding Ascii。输出文件版本包括调用格式化程序,这可能会给您带来意外的结果。请注意,Powershell 是新的跨平台版本。许多评论人都在使用具有大量编码边缘情况的 Windows Powershell,而新版本则没有。 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7 - ninMonkey
    我认为在典型的文件路径中,你不太可能遇到任何编码边缘情况。 - James World

    3
    标记的答案是正确的,但在Windows上您不需要使用"git bash"。您可以在PowerShell中轻松完成相同的操作:最初的回答。
    Set-Content .git\info\sparse-checkout "some/sub-folder/you/want/*" -Encoding Ascii
    

    这将创建一个ANSI编码的文件,但其中包含CR LF(Windows)换行符。然而,git似乎没有问题,可以正常工作并进行稀疏检出。在Windows Server 2012上进行了测试。"最初的回答"。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接