在git中提取/拉取时如何忽略其他目录?

时间:2019-03-21 12:43:12

标签: git

最初,我们的git存储库中有一个子目录。这是我们网站的代码。现在,我们希望包括关联文件,并将其全部保存在一个存储库中,但是对于我们的生产服务器,我们只想git pull/fetch那个原始子目录(即code/)。

在执行gitgit fetch时如何配置git pull忽略所有其他目录?

我不想重生;我发现的大多数解决方案都假定我是从头开始。

1 个答案:

答案 0 :(得分:1)

首先,请注意:有关该问题的前两个评论中的每条评论都有不好的建议[1]。

所以... fetch不会更新工作文件。 pull先进行提取,然后再合并到HEAD,实际上是对通常用于更新工作目录的已更新HEAD进行检出。

您可以设置“稀疏签出”,但是路径仍然相对于工作树根目录。也就是说,如果您有

/
  /other-artifacts
  /website
  file

,您在生产服务器上的仓库为/repo,可以设置稀疏签出给您/repo/website/*,但是如果您想直接显示website的内容在/repo中是另一个故事。

“我不想重新克隆”的声明可能会也可能不会限制您的选择;没有更好地理解原因,我就无法真正解决。假设回购工作树当前是生产网站目录,则重新移动到新位置很可能(一部分)是从您的位置到您想要的位置的最简单方法,尽管移动和/或重新配置现有的仓库可能是可行的。

我要说的是,如果生产目录要成为存储库工作树的子树,那么您可能需要将存储库工作树放置在文件系统上的其他位置。然后,可以用指向工作树正确部分的符号链接替换生产目录。或者您也可以在每次结帐后(使用结帐后挂钩)进行点胶。

另一种根本不同的方法是将网站本身放在单独的存储库中,并使其成为更广泛存储库的子模块。当您开始谈论子模块时,许多人会感到紧张,这将是相当大的返工-不仅仅是确定克隆。

在生产现场使用单独的分支(如注释中所建议)似乎是近似于子模块的“穷人”方法;但是执行类似的操作只会带来麻烦,因为相对于master分支中的所有可实现的提交,“仅生产”分支上的任何提交都将被视为删除了网站文件夹之外的所有内容。


[1]我只能假设作者知道他们并没有真正提出深思熟虑的建议,因为他们选择了“回答”评论,而不是在此处的“答案”部分重新投票。