git - .gitignore 不忽略 tfvars 和 .terraform 目录
问题描述
看来我的 .gitignore 不像预期的那样正确。
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: win_2016_datacentre_vm/.terraform/plugins/linux_amd64/lock.json
new file: win_2016_datacentre_vm/.terraform/plugins/linux_amd64/terraform-provider-azurerm_v1.16.0_x4
new file: win_2016_datacentre_vm/aos-1.tfvars
new file: win_2016_datacentre_vm/aos-1.v1/.terraform/plugins/linux_amd64/lock.json
new file: win_2016_datacentre_vm/aos-1.v1/.terraform/plugins/linux_amd64/terraform-provider-azurerm_v1.16.0_x4
new file: win_2016_datacentre_vm/aos-1.v1/aos-1.plan
new file: win_2016_datacentre_vm/aos-1.v1/aos-1.tf
new file: win_2016_datacentre_vm/aos-1.v1/aos-1.tfvars
new file: win_2016_datacentre_vm/aos-1.v1/terraform.tfstate
new file: win_2016_datacentre_vm/aos-1.v1/terraform.tfstate.backup
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
$ cat .gitignore
# Local terraform directories
docker/*
terraform-getting-started/*
terraform-getting-started.zip
**/.terraform/**
*/**/.tfvars
*.tfstate
让我感到奇怪的是,即使我添加了 .terraform、*.tfvars 和 *.tfstate,为什么要在 git status 中报告它们?
我还应该将 tfstate 提交到存储库吗?
您的帮助将不胜感激。
谢谢
解决方案
为了扩展zerkms 的评论,这一行:
Changes to be committed:
告诉你(和我们)你已经告诉 Git:请包含这些文件。
文件名.gitignore
相当具有误导性。它似乎是 Git 不应该包含的文件列表或文件名模式,但事实并非如此:相反,它是 Git 不应该自动添加的文件名列表,如果它们不存在的话(但是它们已经在那里),并且不应该建议您添加.
更长,但很高兴知道
Git 的模型是 Git 从 Git 调用的内容构建新的提交,不同的是index,或staging area,或cache,这取决于 Git 的谁/哪个部分正在执行调用。我所知道的对索引的最佳简短描述是否是 Git 构建下一个提交的地方(或者在这种情况下,是第一个提交)。
当你第一次检查一些现有的提交时——你还不能,因为没有,但在将来的某个时间你使用git checkout
或git clone
运行时——Git 会从git checkout
那个提交中填充索引,然后使用从提交中提取的索引内容也填充到工作树中。现在索引副本和工作树副本都匹配,并且它们都匹配从提交中取出的文件。
当您拥有一个充满文件的工作树并更改了其中一些文件时,您可以运行git add
将现有的工作树文件重新复制回索引中,以使它们为下一次提交做好准备。现在索引副本和工作树副本再次匹配,并且两者都与仍在提交中的文件不同。(或者,如果文件是全新的,那么它现在在索引中,而不是之前。)
当你进行新的提交时,Git 会冻结索引中的副本,并将它们放入提交中。索引中的任何内容现在都在新提交中,现在是当前提交。所以现在索引与提交匹配,就好像您刚刚签出该提交一样。如果您的所有索引文件与所有工作树文件匹配,则每个文件的所有三个副本都匹配,就像您第一次签出提交时一样。
要从索引中删除文件,请使用:这git rm
将从索引和工作树中删除它。要仅从索引中删除它,将其保留在工作树中,请改用。请注意:如果文件在某些现有提交中,并且您将其从索引中删除,则它不会在您所做的新提交中,但仍将是现有提交。检查其中一个将(或至少可以)覆盖您故意留下的工作树文件。git rm --cached
git rm --cached
推荐阅读
- python - 为什么我收到此 NameError:尝试将 Outlook 电子邮件附件的文件名添加到列表时?
- intellij-idea - IntelliJ 一直在删除我的项目文件,现在它删除了我的整个项目
- reactjs - 如何使用按钮切换多个视图
- javascript - Google Sheet Script - 根据包含电子邮件的一系列单元格隐藏选项卡
- reactjs - React - 在本地状态下更新 2d 数组而不更新显示网格中的每个组件
- python - 使用 for 循环将键和值添加到空字典
- reactjs - Django rest auth 安全地存储令牌
- powershell - 使用 Powershell 通过分隔符拆分 Excel 工作簿的一列
- django - 尝试将 Django 时间字段设置为 00:00:00 但不希望它在显示时显示午夜
- command - 如何使用特定命令删除频道?