为什么.gitignore不忽略我的文件?


Answers:


218

.gitignore仅忽略不属于存储库的文件。如果您已经git add编辑了某些文件,它们的更改仍将被跟踪。要从存储库(而不是从文件系统)中删除这些文件,请git rm --cached在它们上使用。


9
git rm --cached file_name.ext对我来说可以很好地更新一个文件的gitignore。谢谢。
sybozz

3
我这样做了,但是GitHub仍然想跟踪和添加它们。
Netside

92

.gitignore文件可确保未被Git跟踪的文件保持未跟踪状态。

仅将文件夹/文件添加到.gitignore文件中并不会取消跟踪它们-Git仍将跟踪它们。

要取消跟踪文件,必须从存储库中删除.gitignore文件中列出的跟踪文件。然后重新添加它们并提交您的更改。

最简单,最彻底的方法是删除并缓存存储库中的所有文件,然后将它们全部重新添加。.gitignore文件中列出的所有文件夹/文件都不会被跟踪。在存储库的顶部文件夹中,运行以下命令:

git rm -r --cached . git add .

然后提交您的更改:

git commit -m "Untrack files in .gitignore"

请注意,以前使用有害文件进行的任何提交都将保留在提交历史记录中。当推送到GitHub时,请注意可能包含.envclient_secret.json文件的提交历史记录。

最佳实践是创建一个.gitignore文件,并使用在启动项目时不希望跟踪的文件夹/文件填充该文件。但是,通常有必要在意识到正在跟踪和存储不需要的文件之后将其添加到.gitignore文件中。


谢谢你的回答。这确实有帮助。不要忘了将回购推高到git
Chris Reed

使用git rm -r --cached .回滚后,所有更改还可以重新添加所有不应使用.gitignore排除的文件。
亚当·赫维兹

8

gitignore仅忽略未跟踪的文件。您的文件被标记为已修改-意味着它们已经提交,过去以及现在都被git跟踪。

要忽略它们,您首先需要删除它们,git rm然后提交并忽略它们。


6

您可以使用git rm -r --cached ./node_modules。假设是否要忽略节点


4

看一下:.gitignore无法正常工作 ,尤其是来自ADTC的评论:

确保您的.gitignore文件使用ANSI或UTF-8编码。如果它使用诸如Unicode BOM之类的其他内容,则Git可能无法读取文件。– ADTC '17 Dec 14'在12:39


0

首先从您的git repo中删除index.lock文件

rm -f .git/index.lock

然后添加.gitignore

git add .gitignore
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.