.gitignore不忽略tfvars和.terraform目录

时间:2018-11-01 01:04:40

标签: git 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状态报告它们?

我还应该将tfstate提交到存储库吗?

非常感谢您的协助。

谢谢

1 个答案:

答案 0 :(得分:2)

要稍微扩展zerkms's comment,请执行以下行:

Changes to be committed:

告诉您(和我们)您已经告诉Git:请包含以下文件

文件名.gitignore具有误导性。看来这是Git不应包含的文件列表或文件名模式,但事实并非如此:相反,这是Git不应自动添加的文件名列表“还不是在那里(但它们已经在那里),并且不应该建议您应该添加

更长,但很高兴

Git的模型是Git根据Git调用的内容(不同的是 index staging area cache )构建新的提交。 em>,具体取决于Git的谁/哪个部分正在执行调用。我所知道的对索引的最好的简短描述是,它是Git在其中构建要执行的下一个提交(或在本例中,是要进行的第一个提交)的地方。

当您第一次检出一些现有的提交时(尚不存在),但是尚未完成,但是在以后的某个时间,当您使用git checkoutgit clone运行{{1 }} — Git将从提交中的索引中填充,然后使用从提交中提取的索引内容来填充工作树。现在,索引副本和工作树副本都匹配,并且它们都匹配从提交中取出的文件。

当工作树中充满了文件并且已对其中的一些文件进行了更改时,可以运行git checkout将现有的工作树文件重新复制回索引中,以使其准备好用于下一步提交。现在,索引副本和工作树副本再次匹配,并且两者仍与提交中的文件不同。 (或者,如果该文件是全新文件,则该文件现在位于以前的索引中。)

当您进行 new 提交时,Git冻结索引中的副本,并将其放入提交中。索引中的所有内容现在都在新提交中,现在是当前提交。因此,现在索引与提交匹配,就好像您刚刚签出该提交一样。如果所有索引文件都与所有工作树文件匹配,则每个文件的所有三个副本都将匹配,就像您第一次检出提交时一样。

要从索引中删除文件,请使用git add:这将从 索引中将其删除-树。要仅将其从索引中删除并保留在工作树中,请改用git rm。请注意:如果文件在某些​​现有提交中,并且从索引中删除了该文件,则该文件将不在您进行的 new 提交中,但仍将是现有提交。检出其中之一将(至少可以)使用git rm --cached覆盖您故意遗留的工作树文件。