I have certain folders that I ignore in my .gitignore
as I do not want it to be published on Github.
However, these files are essential for when deploying to Google Cloud (local packages).
If I take out .gitignore
from .gcloudignore
then the files that I do want to ignore (like venv, .idea, .pyc
) are uploaded, which is what I do not want.
How can I there include only a portion of .gitgnore
in .gcloudignore
?
.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
From gcloud topic gcloudignore: This will include the contents of a .gitignore -style file at that path at that point in the file. It does not recurse (that is, the included file cannot #!include another file) and cannot be anywhere but the top-level directory to be uploaded. But you don't have to include .gitignore.
The 2 files are mostly orthogonal, they serve different purposes and are used by different tools. The only relationship between them (apart from .gcloudignore inheriting heavily from the .gitignore syntax and behaviour) is the ability to include the .gitignore file inside the .gcloudignore file, which is what you do with:
You can explicitly include a file if it has already been excluded by a pattern (such as inheriting your .gitignore settings, or an excluded directory) previously in the .gcloudignore file. To include a file named foo, make sure the following comes after the rule that excluded it:
Gitignore Explained: What is Gitignore and How to Add it to Your Repo The.gitignore file is a text file that tells Git which files or folders to ignore in a project. A local.gitignore file is usually placed in the root directory of a project.
You can explicitly include a file if it has already been excluded by a pattern (such as inheriting your .gitignore settings, or an excluded directory) previously in the .gcloudignore file.
To include a file named foo
, make sure the following comes after the rule that excluded it:
!foo
To include a folder named 'bar', make sure the following comes after the rule that excluded it:
!bar/
Source: https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore
The 2 files are mostly orthogonal, they serve different purposes and are used by different tools.
The only relationship between them (apart from .gcloudignore
inheriting heavily from the .gitignore
syntax and behaviour) is the ability to include the .gitignore
file inside the .gcloudignore
file, which is what you do with:
#!include:.gitignore
The side effect of that is, of course, that everything in .gitignore
will also be ignored during GAE deployments, as you observed. From gcloud topic gcloudignore:
This will include the contents of a
.gitignore
-style file at that path at that point in the file. It does not recurse (that is, the included filecannot
#!include
another file) and cannot be anywhere but the top-level directory to be uploaded.
But you don't have to include .gitignore
. All you need to do is drop that inclusion and specify exactly just the patterns from .gitignore
that you want to ignore in deployments. If I understand correctly your goal description the .gcloudignore
would look something like this:
.gcloudignore
.git
.gitignore
node_modules
module_data_import
module_calendar
If duplicating those patterns in both files bothers you a potential alternative (IMHO rather complex) might be to take advantage of git's ability to ignore files based on patterns collected from multiple sources (with different scopes, though, so pay attention to that). See https://git-scm.com/docs/gitignore and Can I include other .gitignore file in a .gitignore file? (like #include in c-like languages).
If you can find a proper split fitting your application you could:
.gitignore
just the patterns for files that you also want to ignore at deployments (keeping, of course, the .gitignore
inclusion in .gcloudignore
) .gcloudignore
they would not be ignored at deployments.UPDATE following comment:
In the initial answer I didn't consider the case in which the gcloud command itself executes operations that target directly or indirectly source code repository operations under the hood which, if using git as the version control system, will be, of course, impacted by the presence and content of the .gitignore file. In such case one could arguably consider that the gcloud command itself uses the .gitignore file (regardless of the .gcloudignore file).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With