.gitignore排除特定文件


94

我正在尝试使用.gitignore文件排除文件夹templates.js中的public/app/文件。我的.gitignore文件如下所示:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

但是当我签入Git Gui时,templates.js文件仍然显示在其中。如何使用专门排除文件.gitignore


2
这是否意味着文件之前已经添加到存储库中?.gitignore仅忽略要添加的内容。
Willem Van Onsem

2
@CommuSoft是的,它已经被添加到存储库中。那么,现在如何排除它?我的做法.gitignore正确吗?
user1995781

Answers:


152

与名称“ ignore”可能暗示的相反。.gitignore仅在您git add归档时进行咨询:换句话说,基于不会排除已经添加到(存储)索引的文件.gitignore

首先,您最好修改,.gitignore以便不再添加文件。将以下行添加到.gitignore文件中:

public/app/template.js

接下来,您需要从存储库中排除文件。可能您不想从文件系统中删除文件,可以通过以下方法完成:

git rm --cached public/app/template.js

--cached标志确保该文件不会从文件系统中删除。(如果不重要,则可以使用git rm public/app/template.js但这将删除该文件)。

背景

之所以.gitignore不积极使用,是因为有时您可能想覆盖.gitignore。假设您不想跟踪*.log文件,可以*.log在中指定.gitignore。但是,如果要跟踪的是特定目录,则可以添加git add -f some.log。该-f标志强制git添加文件。


一个
救生员

21

一旦将文件“添加”到git存储库中,无论是否在.gitignore文件中列出该文件,都将继续对其进行跟踪。

我猜想您之前添加了template.js文件,在这种情况下,它将继续跟踪更改,直到将其从存储库中删除为止。从存储库中删除文件后,即可通过.gitignore文件将其正确忽略。

从git仓库(命令行)中删除文件而不删除它的方法是

git rm --cached FILENAME

然后,一旦您这样做并尝试在gitignore中提交文件,它就不会这样做。

请注意,如果您专门添加了gitignore中的文件,则手动添加该文件将覆盖gitignore。


谢谢亲爱的,“ git rm --cached FILENAME”的工作方式很吸引人:)
Kamlesh

11

如果您已经在跟踪文件(git addgit commit),.gitignore将无济于事。

我相信您想要的是停止跟踪文件,然后使用.gitignore排除它。要停止跟踪文件但保留文件,请使用:

git rm --cached <file>


没有dv,但我认为您也许应该选择更好的单词。将其保留在存储库中与将其保留在本地文件系统中有点不同。存储库未映射到文件系统上……
Willem Van Onsem 2015年

@CommuSoft满意后,我不太谨慎,因为其他人回答得更好。谢谢你的建议。
罗斯

7

在这种情况下,你可以停止跟踪templates.js

git rm --cached public/app/templates.js

正如其他人所解释的,.gitignore仅忽略要添加的内容。例如,如果您经常使用git add .并且在templates.js.gitignore,则git不会添加它。

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.