最初,我们的git存储库中有一个子目录。这是我们网站的代码。现在,我们希望包括关联文件,并将其全部保存在一个存储库中,但是对于我们的生产服务器,我们只想git pull/fetch
那个原始子目录(即code/
)。
在执行git
或git fetch
时如何配置git pull
忽略所有其他目录?
我不想重生;我发现的大多数解决方案都假定我是从头开始。
答案 0 :(得分:1)
首先,请注意:有关该问题的前两个评论中的每条评论都有不好的建议[1]。
所以... fetch
不会更新工作文件。 pull
先进行提取,然后再合并到HEAD
,实际上是对通常用于更新工作目录的已更新HEAD
进行检出。
您可以设置“稀疏签出”,但是路径仍然相对于工作树根目录。也就是说,如果您有
/
/other-artifacts
/website
file
,您在生产服务器上的仓库为/repo
,可以设置稀疏签出给您/repo/website/*
,但是如果您想直接显示website
的内容在/repo
中是另一个故事。
“我不想重新克隆”的声明可能会也可能不会限制您的选择;没有更好地理解原因,我就无法真正解决。假设回购工作树当前是生产网站目录,则重新移动到新位置很可能(一部分)是从您的位置到您想要的位置的最简单方法,尽管移动和/或重新配置现有的仓库可能是可行的。
我要说的是,如果生产目录要成为存储库工作树的子树,那么您可能需要将存储库工作树放置在文件系统上的其他位置。然后,可以用指向工作树正确部分的符号链接替换生产目录。或者您也可以在每次结帐后(使用结帐后挂钩)进行点胶。
另一种根本不同的方法是将网站本身放在单独的存储库中,并使其成为更广泛存储库的子模块。当您开始谈论子模块时,许多人会感到紧张,这将是相当大的返工-不仅仅是确定克隆。
在生产现场使用单独的分支(如注释中所建议)似乎是近似于子模块的“穷人”方法;但是执行类似的操作只会带来麻烦,因为相对于master分支中的所有可实现的提交,“仅生产”分支上的任何提交都将被视为删除了网站文件夹之外的所有内容。
[1]我只能假设作者知道他们并没有真正提出深思熟虑的建议,因为他们选择了“回答”评论,而不是在此处的“答案”部分重新投票。