.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状态报告它们?

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

非常感谢您的协助。

谢谢

要稍微扩展zerkms的注释,这一行:

Changes to be committed:

告诉你(和我们(,你已经告诉Git:请包含这些文件

文件名.gitignore具有误导性。这似乎是Git不应该包括的文件列表或文件名模式,但事实并非如此:相反,这是一个文件名列表,如果它们不在已经存在(但它们已经存在(,Git不应自动添加,也不应建议您应该添加

时间更长,但很高兴知道

Git对此的模型是,Git根据Git调用的对象构建新的提交,这些对象包括索引暂存区缓存,具体取决于Git的调用对象。据我所知,对索引最好的简短描述是,Git在这里构建下一个提交(或者在本例中,第一个提交(。

当你第一次签出一些现有的提交时——你还不能签出,因为还没有,但在未来的某个时候,当你使用git checkoutgit clone为你运行git checkout时——Git将填充该提交的中的索引,然后使用从提交中提取的索引内容来填充工作树。现在,索引副本和工作树副本都匹配,并且都匹配从提交中取出的文件。

当工作树中充满文件并更改了其中一些文件时,运行git add将现有工作树文件重新复制回索引中,以便为下一次提交做好准备。现在,索引副本和工作树副本再次匹配,并且两者与仍在提交中的文件不同。(或者,如果文件是全新的,它现在就在索引中,而以前不是。(

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

从索引中删除文件,请使用git rm:这将从索引工作树中删除文件。要仅从索引中删除它,并将其保留在工作树中,请改用git rm --cached。请注意:如果文件在某些现有的提交中,并且您将其从索引中删除,则它不会在您进行的提交中,但它仍然是现有的提交。签出其中一个将——或者至少可以——用git rm --cached覆盖您故意留下的工作树文件。

最新更新