如何在 .gcloudignore 中包含被 .gitignore 忽略的文件

32
我有一些文件夹在.gitignore中被忽略,因为我不想将它们发布到Github。
然而,这些文件对于部署到Google Cloud(本地包)是必要的。
如果我从.gcloudignore中去掉.gitignore,那么我想要忽略的文件(如venv、.idea、.pyc)将被上传,这正是我不想要的。
如何只在.gcloudignore中包含.gitgnore的一部分?
.gcloudignore
.gcloudignore
.git
.gitignore

node_modules
#!include:.gitignore

".gitignore"
# This I want to ignore in .gcloudignore
.Python
env/
build/

# This I want to keep in .gcloudignore
module_data_import
module_calendar

1
我刚刚创建了.gcloudignore文件,它解决了我的问题。 - Jonathan
3个回答

26

如果文件已经被之前的.gcloudignore文件中的模式(如继承您的.gitignore设置或排除的目录)排除,则可以显式地包含该文件。

要包含名为foo的文件,请确保以下内容在排除它的规则之后:

!foo

如果要包含名为'bar'的文件夹,请确保在排除该文件夹的规则之后添加以下内容:

!bar/

来源: https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore


文件夹怎么样? - WJA
3
我已经更新了我的回答,加入了关于目录的例子。 - Chris L Chapman

18

这两个文件大多数情况下是正交的,它们有不同的目的,并且被不同的工具使用。

它们之间唯一的关系(除了 .gcloudignore 在语法和行为上严重继承自 .gitignore)就是能够在 .gcloudignore 文件中包含 .gitignore 文件,这可以通过以下方式实现:

#!include:.gitignore
那样的副作用是,当您进行GAE部署时,.gitignore中的所有内容也将被忽略,就像您观察到的那样。来自gcloud主题gcloudignore
  

这将包括该位置处文件中的.gitignore-style文件的内容。它不会递归(也就是说,所包含的文件不能 #!include 另一个文件),并且必须位于要上传的顶级目录以外的任何位置。

但是您不必包括.gitignore。您只需要放弃该包含并且仅指定从.gitignore中要在部署中忽略的模式即可。如果我正确理解您的目标描述,则.gcloudignore将如下所示:

.gcloudignore
.git
.gitignore

node_modules
module_data_import
module_calendar

如果你觉得在两个文件中复制这些模式很烦人,一个潜在的替代方法(仅限个人意见)可能是利用git根据从多个源(具有不同范围,因此要注意)收集的模式忽略文件的能力。请参见https://git-scm.com/docs/gitignoreCan I include other .gitignore file in a .gitignore file? (like #include in c-like languages)

如果您可以找到适合您应用程序的正确分割,则可以:

  • 仅在.gitignore中保留您希望在部署时忽略的文件的模式(当然,需要将.gitignore包含在.gcloudignore中)
  • 将其他模式放在另一个文件中,git使用它来确定忽略规则-因此它们将被git忽略,但由于此文件未包含在.gcloudignore 中,它们将不会在部署时被忽略。

更新以下评论:

在最初的回答中,我没有考虑gcloud命令本身执行的操作是否直接或间接地针对源代码存储库操作,如果使用git作为版本控制系统,则当然会受到 .gitignore文件的存在和内容的影响。在这种情况下,可以认为gcloud命令本身使用.gitignore文件(无论.gcloudignore文件如何)。


2
这两个文件大多是正交的,它们有不同的目的并且被不同的工具使用。错误的。'gcloud builds' 命令会忽略 .gitignore 中的内容。 - alexamies
您可以证明它确实使用了gitignore并且是有意的。请按照https://cloud.google.com/cloud-build/docs/quickstart-docker上的Cloud Build快速入门指南操作,添加一个包含以下单行内容的.gitignore文件: quickstart.sh 执行云构建命令后,您将获得以下输出: 检查gcloud日志...(请参阅“$ gcloud topic gcloudignore”以了解更多信息)。... 第2/3步:复制quickstart.sh / 复制失败:stat /var/lib/docker/tmp/docker-builder267017000/quickstart.sh:没有那个文件或目录 错误 - alexamies
这并不是文档所说的(这将确实证明意图)。它可能确实是您观察到的症状的描述,但这并不能证明意图,它可能是意外的。 - Dan Cornilescu
@alexamies 我更新了我的回答。gcloud build正在从您当前的目录上传源代码,以供远程执行云构建。我怀疑在幕后使用git来管理源代码作为存储库。通过添加.gitignore文件,您可以防止上传构建的重要部分。 - Dan Cornilescu
1
不错。谢谢。除了GAE,我在Cloud Run上也看到了同样的事情。 - alexamies
显示剩余2条评论

1
为了包含一个在.gitignore中被忽略的文件夹,我必须使用以下语法:
!bar/**

没有**它就不起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接