[英]On Windows git: “error: Sparse checkout leaves no entry on the working directory”
我有错误:
“error: Sparse checkout leaves no entry on the working directory”
尝试在 Windows 上的 git 中设置稀疏结帐时。 在研究了这个问题并在网络上找到了完整的答案后,我已经回答了我自己的问题。
从您希望源代码所在的文件夹中,使用 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 文件。 该文件必须是带有 UNIX 样式行结尾的 ANSI 格式文件,以便 git 正确解析它。 这是“错误:稀疏结帐在工作目录上没有留下任何条目”错误的最可能原因。
从您希望成为根文件夹的目录的父文件夹中,假设文件夹名称为“src”,执行以下操作,这将获取整个 repo(仍然需要),但重要的是不执行结帐,并正确设置启动远程和分支跟踪。
git clone –n <your repository> src
您应该有一个相当空的 src 文件夹(它将包含 .git 隐藏文件夹)。 现在运行以下命令。 这将更新本地 git 配置以打开稀疏结帐,并在 .git/info 隐藏文件夹中创建一个文件,该文件将列出您在进行稀疏结帐时要包含的所有文件夹。 这可以稍后编辑以添加其他文件夹。 重要提示:在编辑 sparse-checkout 文件时,请务必使用 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
现在您可以结帐了。 这应该只留下填充的稀疏结帐文件夹。 如果没有,请仔细检查以上所有内容的拼写!
git checkout <branch-name>
我最近发现 powershell 中的 echo 是写输出的同义词。 可以通过将 echo 传送到允许您指定编码的out-file
命令来获得 ASCII 输出。 所以这将适用于 Powershell 并提供正确的文件内容:
echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
标记的答案是正确的,但您不需要在 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 上测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.