在Windows上git:“错误:稀疏结帐离开工作目录没有条目”

我有错误:

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

当试图build立一个在Windows上的git稀疏结帐。 在研究这个问题之后,我已经回答了我自己的问题,并在网上find了完整的答案。

TL;博士

从你想要源生活的文件夹中, 使用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上设置它得到了很多的“错误:稀疏结帐离开工作目录没有条目”。 经过一番研究,我发现以下步骤是微不足道的,并且对我来说一直有很好的结果 – YMMV。

最重要的一点是 – 不要使用POWERSHELL / CMD进行这些步骤 – 使用git bash提示符。 这是因为否则echo命令会生成一个带有BOM标记的UNICODE文件。 这个文件必须是一个ANSI格式的文件,用UNIX风格的行尾来让git正确解析它。 这是导致“错误:稀疏结帐在工作目录上没有输入”错误的最可能原因。

  1. 从目录的父目录你想成为根文件夹,假设文件夹名称为“src”执行以下操作,这将抓取整个回购(这仍然是必需的),但重要的是不执行检出,并正确设置起始远程和分支跟踪。

     git clone –n <your repository> src 
  2. 你应该有一个相当空的src文件夹(它将有.git隐藏文件夹)。 现在运行以下。 这将更新本地git配置以启用稀疏签出,并在.git / info隐藏文件夹中创建一个文件,该文件将列出您在执行稀疏签出时要包括的所有文件夹。 这可以稍后编辑添加其他文件夹。 重要 :确保在下面使用git bash提示符,并使用支持unix行结束约定的编辑器,并在编辑sparse-checkout文件时另存为ANSI,否则可能会出现“错误:Sparse checkout在工作目录“错误。 <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 
  3. 现在你已经准备好结帐了。 这应该只填充稀疏检出文件夹。 如果没有,仔细检查你的拼写上面的一切!

     git checkout <branch-name> 

编辑 – 在PowerShell中回声

我最近发现powershell中的echo是写输出的synomym。 通过将echo输出到允许指定编码的out-file命令可以获得ASCII输出。 所以这将从Powershell工作,并提供正确的文件内容:

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