无法忽略以前在Git仓库中忽略的文件

我有一个网站有一个/sites/default/files/目录,其中用户内容通常保存。 考虑到我不需要跟踪这个东西,我添加/ sites / default / files /到我的.gitignore文件。

然后我发现我也想在这个目录中保留一些大部分的永久上传。 现在,跟踪/ sites / default / files /中的所有内容并排除不需要的子目录会更有意义,而不是相反。

问题是,Git不会停止忽略该目录。 我从.gitignore中删除了指定这个目录的行,它不会跟踪它。 我可以select使用git add /sites/default/files/ -f来强制git来跟踪目录,但是我之前做过,看起来很乱。

如果.gitignore不再指定该目录被忽略,为什么我不得不强制Git开始跟踪这些文件?

你知道如何做到这一点。 是的, git add -f就是这样。

如果你问为什么…这是因为git在内部设置了一个assume-unchanged位。 这一点让git认为文件没有被修改,所以git add不会添加它。

如果你想搞乱实现细节,可以使用git update-index --no-assume-unchanged <file>命令。

我不认为歼-16是正确的。 从http://www.kernel.org/pub/software/scm/git/docs/git-add.html

git add命令默认不会添加被忽略的文件。 如果在命令行上明确指定了任何被忽略的文件,那么git add将会失败并显示被忽略的文件列表。 忽略由Git执行的目录recursion或文件名匹配所达到的文件(在shell之前引用您的globs)将被忽略。 git add命令可用于使用-f(强制)选项添加忽略的文件。

git add -f似乎只是用来添加一个文件,存在于某个忽略文件中。

也许在/ sites或/ sites / default中有另一个.gitignore文件,它也告诉Git忽略这个目录,或者它已经在.git / info / exclude中设置了。

对于后人:我的问题的答案是“只是看得更近”。

@twalberg正确地指出,在.gitignore文件中可能存在一个我忽略的规则。 应用.gitignore规则的层叠方式可以使文件更加广泛地排除在预期之外。

据我所知,我所做的关于git工作的假设是正确的。 同样,我的情况似乎也不支持(或反驳)@ J-16 SDiZ对于assume-unchanged位可能扮演什么angular色的评论。

我们在Drupal站点目录中有一个非常类似的问题。 问题是Drupal发行版在更高级别的drupal目录中有一个.gitignore文件,与drupal / sites / files / *