我有错误:
“error: Sparse checkout leaves no entry on the working directory”
尝试在 Windows 上的 git 中设置稀疏 checkout 时。在研究了这个问题并找到了遍布整个网络的完整答案后,我已经回答了我自己的问题。
最佳答案
tl;dr
从您希望源所在的文件夹,使用 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>
完整解释
稀疏 checkout 使您能够处理存储库的一个子集。在大型存储库上设置稀疏检查是值得的,一切都快得多!
我努力在 Windows 上设置它,收到很多“错误:稀疏 checkout 在工作目录上没有留下任何条目”。经过一番研究后,我发现以下步骤最少,而且对我来说一直都有很好的效果——YMMV。
最重要的一点是——不要在这些步骤中使用 POWERSHELL/CMD——使用 git bash 提示符。这是因为否则 echo 命令会生成带有 BOM 标记的 UNICODE 文件。该文件必须是具有 UNIX 样式行结尾的 ANSI 格式文件,以便 git 正确解析它。这是“错误:稀疏 checkout 在工作目录上没有留下任何条目”错误的最可能原因。
从您希望成为根文件夹的目录的父目录,假设文件夹名称为“src”,执行以下操作,这将获取整个存储库(这仍然是必需的),但重要的是不执行 checkout ,并正确设置源远程和分支跟踪。
git clone –n <your repository> src
您应该有一个看起来相当空的 src 文件夹(它将包含 .git stash 文件夹)。现在运行以下命令。这会更新本地 git 配置以打开稀疏 checkout ,并在 .git/info stash 文件夹中创建一个文件,该文件将列出您在执行稀疏 checkout 时要包含的所有文件夹。这可以稍后编辑以添加其他文件夹。 重要:一定要在下面使用 git bash 提示符,并在编辑 sparse-checkout 文件时使用支持 unix 行结束约定的编辑器并另存为 ANSI,否则你可能会得到“错误:稀疏 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
现在您可以 checkout 了。这应该只留下填充的稀疏 checkout 文件夹。如果没有,请仔细检查上面所有内容的拼写!
git checkout <branch-name>
编辑 - Powershell 中的 Echo
我最近发现 powershell 中的 echo 是写输出的同义词。可以通过将回显传送到 out-file
来获得 ASCII 输出允许您指定编码的命令。所以这将在 Powershell 中运行并提供正确的文件内容:
echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
关于windows - 在 Windows 上 git : “error: Sparse checkout leaves no entry on the working directory” ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23289006/