【发布时间】:2014-06-10 22:12:18
【问题描述】:
我遇到了错误:
“error: Sparse checkout leaves no entry on the working directory”
尝试在 Windows 上的 git 中设置稀疏结帐时。在研究了这个问题并在网上找到了完整的答案后,我已经回答了我自己的问题。
【问题讨论】:
标签: windows git powershell github-for-windows
我遇到了错误:
“error: Sparse checkout leaves no entry on the working directory”
尝试在 Windows 上的 git 中设置稀疏结帐时。在研究了这个问题并在网上找到了完整的答案后,我已经回答了我自己的问题。
【问题讨论】:
标签: windows git powershell github-for-windows
标记的答案是正确的,但您不需要在 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 上测试。
【讨论】:
从您希望源代码所在的文件夹中,使用 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 正确解析它。这是“错误:稀疏签出在工作目录上没有条目”错误的最可能原因。
从您希望成为根文件夹的目录的父目录中,假设文件夹名称为“src”,请执行以下操作,这将获取整个 repo(仍然是必需的),但重要的是不执行结帐,并正确设置源远程和分支跟踪。
git clone –n <your repository> src
你应该有一个看起来相当空的 src 文件夹(它将有 .git 隐藏文件夹)。现在运行以下命令。这将更新本地 git 配置以打开稀疏签出,并在 .git/info 隐藏文件夹中创建一个文件,该文件将列出您在执行稀疏签出时要包含的所有文件夹。稍后可以对其进行编辑以添加其他文件夹。 重要提示:请务必在下面使用 git bash 提示符,并在编辑 sparse-checkout 文件时使用支持 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
现在您可以结帐了。这应该只填充稀疏结帐文件夹。如果不是,请仔细检查以上所有内容的拼写!
git checkout <branch-name>
我最近发现 powershell 中的 echo 是 write-output 的同义词。可以通过将 echo 传送到 out-file 命令来获取 ASCII 输出,该命令允许您指定编码。所以这将在 Powershell 中工作并提供正确的文件内容:
echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
【讨论】:
Power这句话的东西。
%GITHOME%\usr\bin\echo.exe <path you want to checkout> >> .git/info/sparse-checkout
Out-File -encoding 更可靠的是用 Set-Content -Encoding Ascii 替换它。 out 文件版本包括调用格式化程序,这可能会给您带来意想不到的结果。请注意,Powershell 是新的跨平台版本。许多 cmets 是人们正在使用Windows Powershell,它有大量的编码边缘情况,而新的则没有。 docs.microsoft.com/en-us/powershell/module/…>