为什么git稀疏结账会留下目录?

时间:2013-03-25 15:49:17

标签: windows git sparse-checkout

一些背景知识:我公司的服务模式最初是基于设备的服务器模型。我们会向客户端发送一台带有Windows Server 2003/2008的服务器,预装了网络服务器和我们的软件。我们将所有特定于客户端的配置移动到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/

我已经多次尝试过,每次都在新目录中,每次都会出现问题。我的ju-git-su让我失望了。我们使用的是git版本1.8.1.msysgit.1。

感谢您的帮助,如果我需要提供更多信息,请与我们联系。

---编辑1 ---

澄清:存储库只是我们客户端的配置目录。每个客户端在存储库中都有一个不同的目录,我们正在尝试在每个客户端的单个服务器上进行稀疏检查,因此我们尝试排除除相关客户端之外的所有内容。

---编辑2 ---

只是一个更新,事实证明它是Windows文件夹权限不可思议,而Git试图删除非空目录。通过删除空文件夹来修复它。感谢您提供帮助的所有尝试!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

部分解决方案:根据git-read-tree(1),您可以通过放置一个来排除特定文件!在文件名前面。然而,这可能是一个错误的写法(意味着那也是目录,而不是文件)。

我会继续调查。

根据https://stackoverflow.com/a/11222033/1210278,您可以使用git update-index --skip-worktree www.randomclient1.com/手动标记目录。

https://stackoverflow.com/a/9575837/1210278意味着排除仅适用于目录,并表示存在一些错误。