Git没有使用.gitignore文件中的内容

4
我正在使用Rails,并将tmp目录和Gemfile添加到我的.gitignore中。但每次我更改它时,git status告诉我已经更改了。在我的开发机器和服务器上都是如此。有点烦人。
.gitignore的内容:
.DS_Store
data/export/*.csv
tmp/*
*.rbc
*.sassc
.sass-cache
capybara-*.html
.rspec
/.bundle 
/vendor/bundle 
/log/* 
/tmp/* 
/db/*.sqlite3 
/public/system/* 
/coverage/ 
/spec/tmp/* 
**.orig 
config/*.yml 
rerun.txt 
pickle-email-*.html 
Gemfile*

1
你的 .gitignore 文件里面包含了哪些内容? - manojlds
.DS_Store data/export/.csv tmp/ .rbc .sassc .sass-cache capybara-.html .rspec /.bundle /vendor/bundle /log/ /tmp/* /db/.sqlite3 /public/system/ /coverage/ /spec/tmp/* **.orig config/.yml rerun.txt pickle-email-.html Gemfile* - Ulf
请在你的问题中添加并尝试格式化它 :) - manojlds
可能是重复的问题:.gitignore不起作用 - emlai
2个回答

15

可能是因为git已经在跟踪这些文件,尝试使用git rm命令删除它们:

git rm --cached Gemfile

(虽然你应该将Gemfile放入版本控制中)

至于tmp目录:

git rm -r --cached tmp

--cached 表示不删除工作文件,-r 用于递归地从目录中删除。

执行此操作后,git 将遵守 .gitignore 文件。


以这种方式删除Gemfile是有效的。但是tmp目录不行。当我尝试时,我一直收到以下错误:fatal: pathspec 'tmp' did not match any files。 - Ulf
@ulf 听起来你没有跟踪 tmp 文件夹中的任何文件。尝试在其中添加/更改一个文件,看看 git 是否会注意到它。 - matt

1
如果您的tmp和GemFile目录已经被版本化,Git将不会忽略它们。
要么通过执行以下操作取消版本化:
git rm -r --cached tmp
git commit -am "removing tmp"

(--cached 使它们保留在您的工作目录中)

,或忽略它们不被忽略(:)),或执行类似以下操作:

git update-index --assume-unchanged tmp/**

上述命令“暂时忽略”已经版本化的文件夹中的更改。


据我所知(可能是错误的,懒得测试),Git会忽略更改,即使它们已经被版本化。所以,是的,你是正确的,它们仍然被版本化,但不应该出现在git status中。 - KingCrunch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接