Windows 为什么git稀疏签出会留下目录?

Windows 为什么git稀疏签出会留下目录?,windows,git,sparse-checkout,Windows,Git,Sparse Checkout,一些背景:我公司的服务模式最初是基于设备的服务器模式。我们将向客户发送一台装有Windows server 2003/2008的服务器,并预装一台Web服务器和我们的软件。我们将所有特定于客户端的配置移动到Git存储库中,并使用稀疏签出使每个服务器只包含客户端软件正常运行所需的内容 在设置稀疏签出时,我们遇到了巨大的不一致性。我们会的 git clone git@github.com:ourclientconfigrepo.git . git config core.sparsecheckout

一些背景:我公司的服务模式最初是基于设备的服务器模式。我们将向客户发送一台装有Windows server 2003/2008的服务器,并预装一台Web服务器和我们的软件。我们将所有特定于客户端的配置移动到Git存储库中,并使用稀疏签出使每个服务器只包含客户端软件正常运行所需的内容

在设置稀疏签出时,我们遇到了巨大的不一致性。我们会的

git clone git@github.com:ourclientconfigrepo.git .
git config core.sparsecheckout true
echo www.thisclient.com/ > .git/info/sparse-checkout
git read-tree -m -u HEAD
预期结果将是

ls
www.thisclient.com/
但是我们得到了

ls
www.thisclient.com/
www.randomclient1.com/
www.randomclient2.com/
www.randomclient3.com/
我尝试过多次,每次都在一个新的目录中,每次都会出现问题。我的朱吉苏在这里让我失望。我们使用的是git版本1.8.1.msysgit.1

谢谢你的帮助,如果我需要提供更多信息,请告诉我

---编辑1---
澄清:存储库只是我们客户的配置目录。每个客户机在存储库中都有一个不同的目录,我们试图在每个客户机的单独服务器上稀疏签出,因此我们试图排除除所讨论的客户机之外的所有内容

---编辑2---
只是一个更新,结果是Windows文件夹权限不稳定,Git试图删除非空目录。通过删除空文件夹修复了此问题。谢谢你的帮助

部分解决方案:根据,您可以通过放置一个!在文件名前面。然而,这可能是一个误写(这意味着这也是针对目录,而不是文件)

我会继续调查

根据,您可以使用
git更新索引手动标记目录——跳过工作树www.randomclient1.com/


这意味着排除仅适用于目录,并表示存在一些错误。

克隆操作不是创建稀疏克隆的正确方法。而不是:

git clone ...
您应该使用以下顺序:

mkdir repo ; cd repo ; git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
mkdir回购;cd回购;初始化
git远程添加f源
git config core.sparsecheckout true
echo/>.git/info/sparse签出
echo/>.git/info/sparse签出
echo/>.git/info/sparse签出
git拉源主机

澄清一下:它们是目录。也许目录名中有点奇怪。。。。?不过,这似乎不对。澄清:存储库只是我们客户机的配置目录。每个客户端在存储库中都有一个不同的目录,我们试图在每个客户端的单独服务器上稀疏签出,因此我们试图排除除有问题的客户端之外的所有内容。结果发现它们都是空的,但我们投赞成票,因为它们是唯一一个尝试签出的客户端@AlexD尝试将
.gitkeep
文件放入其中(它在Git中没有实际用途,只是将目录保存在那里)或自述文件。