我的.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 checkout
或git clone
为你运行git checkout
时——Git将填充该提交的中的索引,然后使用从提交中提取的索引内容来填充工作树。现在,索引副本和工作树副本都匹配,并且都匹配从提交中取出的文件。
当工作树中充满文件并更改了其中一些文件时,运行git add
将现有工作树文件重新复制回索引中,以便为下一次提交做好准备。现在,索引副本和工作树副本再次匹配,并且两者与仍在提交中的文件不同。(或者,如果文件是全新的,它现在就在索引中,而以前不是。(
当您进行新的提交时,Git会冻结索引中的副本,并将其放入提交中。索引中的内容现在都在新的提交中,也就是当前的提交。所以现在索引与提交匹配,就好像您刚刚签出了提交一样。如果所有索引文件都与所有工作树文件匹配,那么每个文件的所有三个副本都匹配,就像第一次签出提交时一样。
要从索引中删除文件,请使用git rm
:这将从索引和工作树中删除文件。要仅从索引中删除它,并将其保留在工作树中,请改用git rm --cached
。请注意:如果文件在某些现有的提交中,并且您将其从索引中删除,则它不会在您进行的新提交中,但它仍然是现有的提交。签出其中一个将——或者至少可以——用git rm --cached
覆盖您故意留下的工作树文件。