在获取/拉入git时,如何忽略其他目录?
最初,我们的git存储库中有一个子目录。这是我们网站的代码。现在我们希望包含相关文件并将其保存在一个存储库中,但对于我们的生产服务器,我们只希望在获取/拉入git时,如何忽略其他目录?,git,Git,最初,我们的git存储库中有一个子目录。这是我们网站的代码。现在我们希望包含相关文件并将其保存在一个存储库中,但对于我们的生产服务器,我们只希望git pull/fetch原始子目录(即code/) 如何配置git在执行git fetch或git pull时忽略所有其他目录? 我不想逃避;我找到的大多数解决方案都假设我是从零开始的。首先,一句警告:关于这个问题的前两条评论中的每一条都有不好的建议[1] 所以获取不更新工作文件pull执行一次提取,然后合并到HEAD(大致上),实际上是签出更新的H
git pull/fetch
原始子目录(即code/
)
如何配置git
在执行git fetch
或git pull
时忽略所有其他目录?
我不想逃避;我找到的大多数解决方案都假设我是从零开始的。首先,一句警告:关于这个问题的前两条评论中的每一条都有不好的建议[1] 所以<代码>获取不更新工作文件
pull
执行一次提取,然后合并到HEAD
(大致上),实际上是签出更新的HEAD
,通常更新工作目录
您可以设置“稀疏签出”,但路径仍然相对于工作树根。也就是说,如果你有
/
/other-artifacts
/website
file
您的repo位于生产服务器上的/repo
,您可以设置一个稀疏签出,为您提供/repo/website/*
,但如果您希望网站的内容直接出现在/repo
中,那就另当别论了
“我不想重新克隆”这句话可能会也可能不会限制你的选择;没有更好的理解原因,我无法真正解决这个问题。假设repo worktree当前是生产网站目录,那么重新定位到一个新位置可能是(其中的一部分)从您所在的位置到您想要的位置的最简单方法,尽管移动和/或重新配置现有的repo可能是可行的
我的意思是,如果生产目录是repo工作树的子树,那么您可能需要将repo工作树放在文件系统的其他地方。然后,生产目录可以替换为指向工作树正确部分的符号链接;或者,您可以在每次签出后将其取出(使用签出后挂钩)
另一个根本不同的方法是将网站本身置于单独的回购协议中,并使其成为更广泛回购协议的子模块。当你开始谈论子模块时,很多人都会感到紧张,这将是相当大的返工,而不仅仅是确定的重新调整
似乎在生产现场使用一个单独的分支(如评论中所建议的)将是近似子模块的“穷人”方法;但这样做只是自找麻烦,因为“仅生产”分支上的任何提交都会被视为删除了网站文件夹之外的所有内容,相对于主分支的任何可访问提交
[1] 我只能假设作者知道他们并没有给出经过深思熟虑的建议,因为他们选择了“回答”这可能是你可以用解决的问题。gitignore
文件你可能想重新考虑你的分支机构管理。如果您仅为子模块创建了一个新分支,并且贡献者可以签出该分支,但仍可以根据需要从主分支获取以引用原始站点文件,这可能会更整洁,因此您可以选择将其添加内容合并到主分支中。@Hoog-不,不是这样的。gitignore被广泛误解,所以不要散布关于它的推测性错误信息会有所帮助。@usrrname这是一个非常好的建议。有没有办法告诉git
只从主分支同步到特定的子目录路径?我不认为。这是我想要的。谢谢。我将在本周晚些时候处理这个问题。如果其他提供的解决方案需要更多的工作才能得到我想要的,我愿意重新考虑我的“我不想重新克隆”要求。