【问题标题】:On Windows git: “error: Sparse checkout leaves no entry on the working directory”在 Windows git 上:“错误:稀疏签出在工作目录上没有留下任何条目”
【发布时间】:2014-06-10 22:12:18
【问题描述】:

我遇到了错误:

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

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

【问题讨论】:

    标签: windows git powershell github-for-windows


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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”,请执行以下操作,这将获取整个 repo(仍然是必需的),但重要的是不执行结帐,并正确设置源远程和分支跟踪。

        git clone –n <your repository> src
        
      2. 你应该有一个看起来相当空的 src 文件夹(它将有 .git 隐藏文件夹)。现在运行以下命令。这将更新本地 git 配置以打开稀疏签出,并在 .git/info 隐藏文件夹中创建一个文件,该文件将列出您在执行稀疏签出时要包含的所有文件夹。稍后可以对其进行编辑以添加其他文件夹。 重要提示:请务必在下面使用 git bash 提示符,并在编辑 sparse-checkout 文件时使用支持 unix 行尾约定并保存为 ANSI 的编辑器,否则您可能会收到“错误:稀疏签出在工作目录上没有留下任何条目”错误。 &lt;path you want to checkout&gt; 可能如下所示: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 中的 Echo

      我最近发现 powershell 中的 echo 是 write-output 的同义词。可以通过将 echo 传送到 out-file 命令来获取 ASCII 输出,该命令允许您指定编码。所以这将在 Powershell 中工作并提供正确的文件内容:

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

      【讨论】:

      • 永远不要相信任何带有Power这句话的东西。
      • 另一种解决方案是使用git客户端自带的echo命令。这对我有用:%GITHOME%\usr\bin\echo.exe &lt;path you want to checkout&gt; &gt;&gt; .git/info/sparse-checkout
      • 这仍然会导致创建“want”文件夹。有没有办法防止这种情况?我尝试过使用 'path/you/want/*' 但同样的问题发生了。
      • 不清楚你在追求什么。正在创建的“想要”文件夹是意图。稀疏结帐过滤结帐,它们不会重新定位它们。
      • Out-File -encoding 更可靠的是用 Set-Content -Encoding Ascii 替换它。 out 文件版本包括调用格式化程序,这可能会给您带来意想不到的结果。请注意,Powershell 是新的跨平台版本。许多 cmets 是人们正在使用Windows Powershell,它有大量的编码边缘情况,而新的则没有。 docs.microsoft.com/en-us/powershell/module/…>
      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多