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

时间:2014-04-25 09:18:45

标签: windows git powershell github-for-windows

我有错误:

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

尝试在Windows上的git中设置稀疏结帐时。在研究了问题并找到了完整的答案后,我已经回答了我自己的问题。

2 个答案:

答案 0 :(得分:58)

TL;博士

从您希望源所在的文件夹中,使用git-bash提示符NOT 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行结束约定的编辑器,并在编辑稀疏结帐文件时另存为ANSI,否则可能会出现“错误:稀疏结账不会在工作目录中留下任何条目“错误。 <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>
    
  4. 编辑 - Powershell中的回声

    我最近发现powershell中的echo是写输出的同义词。通过将回显管道传递给允许您指定编码的out-file命令,可以获得ASCII输出。所以这将从Powershell开始,并提供正确的文件内容:

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

答案 1 :(得分:0)

标记的答案是正确的,但是在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上测试。