gitignore不忽略文件夹


135

在项目的根目录下,我有一个foo文件夹。在foo文件夹中,我有一个bar文件夹。我想忽略对文件bar夹内所有文件的所有更改。我在我的gitignore

/foo/bar

该文件夹已选中:它存在并且其中有要忽略的文件。gitignorecommitted。但是,我有一个要修改的文件,并且位于我的bar文件夹内。当我打字

git status

在我里面,我git bash看到应该被忽略的文件。原因可能是什么?如何成功忽略bar文件夹中的所有文件?

请注意,以前用同一行忽略了这些文件,但是我不得不将该行临时删除到commit服务器上的某行。之后commit,我把线放回去gitignore。这是前一阵子,但现在我注意到文件将在中git status。我希望能够修改被忽略的文件而不会出现在中git status


将来,您无需修改​​忽略即可添加忽略的内容。git add -f ignored-file即使您忽略了文件,也会添加一个文件。
克里斯(Chris

有什么作用git status foo/bar/file-that-should-be-ignored
克里斯(Chris

如果发生任何更改,应忽略的文件。我显然缺少了一些东西,但是据我所知,如果.gitignore中存在/ foo / bar,则git status列表应该为空
Lajos Arpad

4
听起来好像Git实际上正在跟踪该文件。必须在某个时候将其添加到存储库中。您可以通过查看它的历史git log foo/bar/file-that-should-be-ignored。如果它不应该成为存储库的一部分,则应将其删除git rm --cached foo/bar/file-that-should-be-ignored,然后按照下面的Reck的建议进行提交(尽管我只是在文件而不是整个文件夹上进行操作)。这将(a)从Git中删除文件,(b)将文件保留在本地副本中,以及(c)在其他文件fetchpull新提交时导致文件被删除。
克里斯(Chris

Answers:


341

我猜这个文件夹之前已经被检入git了吗?

运行git rm -r --cached <folder>并再次检查。


3
这将从(当前版本的)仓库中完全删除该文件夹。OP希望文件夹存在,但不应跟踪新更改
Gareth 2014年

不幸的是,我必须删除接受。当推送时,此解决方案删除了​​文件的远程版本。我想将gitignore设置为忽略文件夹的所有文件,而不是将其从远程删除。那可能吗?我已经恢复了解决方案。
Lajos Arpad 2014年

12
git update-index --assume-unchanged <folder>也许?
Reck

3
@Lajos不应该只是解决了他的错误,而不是在此处添加此令人困惑的“编辑”评论吗?
cregox

2
@Cawas,因为此站点是有关知识共享的,答案是:不。接受包含错误的答案会产生误导。-r不是可选的。
Lajos Arpad

46

对我而言,可接受的答案是解决方案的一部分,而不是整个解决方案。也许,我要发布的其他步骤很明显,但我首先错过了它们。这是我为确保.gitignore文件忽略了我希望其忽略的文件夹而采取的步骤:

  1. 提交您需要修复/更改的任何更改。
  2. 运行以下命令:(git rm -r --cached .它将从git索引中删除所有内容,以刷新git存储库)
  3. 然后运行以下命令:(git add .将所有内容添加回仓库)
  4. 最后,使用以下命令提交这些更改 git commit -m ".gitignore Fixed"

你可以找到链接,从那里我找到了解决方案的文章在这里


1
基于原始问题,这不是可行的解决方案。@ lagos-arpad专门询问一个子目录,而不是整个项目。您的解决方案将从git信息库的根目录中删除所有内容,因此不建议使用此方法来解决此问题。
justinhartman

即使它只是一个子目录,该解决方案也对我有用,因为我只处理一个文件。您能否详细说明为什么不建议这样做?
sikanderBabwani

1
您处理的内容无关紧要。这不是问题的答案,并且正如另一个答案所指出的那样具有潜在的危险。这将删除您不需要的远程存储库中的内容。
RichieHH '18

8

我遇到了这个问题,我意识到git实际上实际上正确地忽略了文件/文件夹,但是我的代码编辑器(Visual Studio Code)只是个错误,而没有在UI边栏中正确地“灰化”它们。我重新启动了VSCode,它们按预期显示为灰色。


此处相同:VS代码v1.30.2(用户)
xinthose

我也是。非常感谢您提供此解决方案!我想知道为什么我的.gitignore不能正常工作,直到我尝试重新启动VS Code。我使用的是Visual Studio Code v1.44.2。
Fritz Lim

6

作为公认答案的补充

git rm -r --cached /foo/bar/
git status

当我这样做时,终端会rm在该目录中显示一堆for文件。因此,为了防止可能不必要地影响远程的另一次提交,我这样做了:

git reset HEAD *
git status

之后,它什么也没提交,当我在其中修改文件/foo/bar/并执行操作时,git status我仍然得到nothing to commit


1
这只是让我回到了开始的地方(问题所在)
Shonubi Korede
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.