【问题标题】:How to include files in .gcloudignore that are ignored in .gitignore如何在 .gcloudignore 中包含在 .gitignore 中被忽略的文件
【发布时间】:2019-11-07 02:50:48
【问题描述】:

我在 .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

【问题讨论】:

  • 我刚刚创建了.gcloudignore 文件,它解决了我的问题

标签: git github google-cloud-platform gitignore gcloud


【解决方案1】:

要包含在.gitignore 中被忽略的文件夹,我必须使用以下语法:

!bar/**

没有** 将无法正常工作。

【讨论】:

    【解决方案2】:

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

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

    !foo
    

    要包含名为“bar”的文件夹,请确保在排除它的规则之后出现以下内容:

    !bar/
    

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

    【讨论】:

    • 文件夹怎么样
    • 用目录示例更新了我的答案。
    【解决方案3】:

    这两个文件大多是正交的,它们用于不同的目的并被不同的工具使用。

    它们之间的唯一关系(除了从.gitignore 语法和行为大量继承的.gcloudignore 之外)是能够将.gitignore 文件包含在.gcloudignore 文件中,这就是你所做的:

    #!include:.gitignore
    

    当然,这样做的副作用是,正如您所观察到的,.gitignore 中的所有内容 在 GAE 部署期间也将被忽略。来自gcloud topic gcloudignore

    这将包含.gitignore 样式文件的内容 文件中该点的路径。它不递归(即 包含文件cannot#!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 文件如何)。

    【讨论】:

    • >> 这两个文件大多是正交的,它们服务于不同的目的并被不同的工具使用。错误的。 'gcloud builds' 命令将 .gitignore 中的内容引入。
    • 您的意思是不将其包含在 .gcloudignore 中?如果是这样,我敢打赌这不是故意的 ;)
    • 您可以证明它确实使用了 gitignore 并且是有意的。按照 cloud.google.com/cloud-build/docs/quickstart-docker 的 Cloud Build Quickstart 添加一个包含单行 quickstart.sh 的 .gitignore 文件 执行 cloud build 命令后,您将获得输出 Check the gcloud log...(请参阅 $ gcloud topic gcloudignore 了解更多信息)。 ... 步骤 2/3:复制 quickstart.sh / 复制失败:stat /var/lib/docker/tmp/docker-builder267017000/quickstart.sh:没有这样的文件或目录错误
    • 这不是文件所说的(这确实表明了意图)。这可能确实是对您观察到的症状的描述,但这并不表明意图,这可能是偶然的。
    • 不错。谢谢。除了 GAE,我在 Cloud Run 上也看到了同样的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2012-03-15
    • 2012-11-25
    • 2021-08-07
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多