【问题标题】:Why does git sparse checkout leave behind directories?为什么 git sparse checkout 会留下目录?
【发布时间】:2013-03-15 04:31:19
【问题描述】:

一些背景:我公司的服务模式开始是基于设备的服务器模式。我们将向我们的客户发送一台装有 Windows Server 2003/2008 的服务器,预装了一个网络服务器和我们的软件。我们将所有客户端特定的配置移至 Git 存储库,并使用 sparse-checkout 使每个服务器仅包含客户端软件正常运行所必需的内容。

在设置稀疏结帐时,我们遇到了巨大的不一致。我们会做的

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 试图删除非空目录。通过删除空文件夹来修复它。感谢您提供帮助的所有尝试!

【问题讨论】:

  • 澄清一下:它们目录。目录名称中的点可能有些奇怪......?不过,这似乎不对。

标签: windows git sparse-checkout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    我会继续调查。

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

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

    【讨论】:

    • 澄清:存储库只是我们客户的配置目录。每个客户端在存储库中都有不同的目录,我们试图在每个客户端的单独服务器上进行稀疏签出,因此我们试图排除除相关客户端之外的所有内容。
    • 原来他们是空的,但赞成是唯一一个尝试的人!
    • @AlexD 尝试在其中放置一个.gitkeep 文件(它在 Git 中没有实际用途,只是将目录保留在那里)或 README 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2012-06-28
    • 2014-02-15
    • 2012-06-24
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多