gitignore-无法忽略Git rep中先前忽略的文件

我有一个站点具有git add /sites/default/files/ -f目录,该目录通常保留用户内容。 考虑到我不需要跟踪这些东西,我在/ gitignore文件中添加了/ sites / default / files /。

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

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

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

doub1ejack asked 2019-10-08T22:47:27Z
4个解决方案
63 votes

您已经知道该怎么做了。 是的,方法是git update-index --no-assume-unchanged <file>

如果您问为什么...这是因为git在内部设置了git update-index --no-assume-unchanged <file>位。 这一点使git认为该文件未修改,因此git add不会添加它。

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

J-16 SDiZ answered 2019-10-08T22:47:51Z
11 votes

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

git add命令默认不会添加被忽略的文件。 如果在命令行上明确指定了任何被忽略的文件,则git add将失败,并显示被忽略文件的列表。 由目录递归或Git执行的文件名遍历(在shell之前引用您的遍历)到达的忽略文件将被静默忽略。 git add命令可用于通过-f(强制)选项添加忽略的文件。

git add -f似乎仅用于添加在某个地方的忽略文件中确实存在的文件。

也许/ sites或/ sites / default中还有另一个.gitignore文件,它也告诉Git忽略此目录,或者它是否已在.git / info / exclude中设置?

hdgarrood answered 2019-10-08T22:48:36Z
4 votes

为了后人:我的问题的答案是“近距离观察”。

@twalberg正确指出,.gitignore文件中可能存在一条我忽略的规则。 应用.gitignore规则的级联方式使排除比预期范围更广的文件变得容易。

据我所知,我对git如何工作的假设是正确的。 同样,我的案件似乎不支持(或反对)@ J-16 SDiZ关于assume-unchanged位可能起什么作用的评论。

doub1ejack answered 2019-10-08T22:49:15Z
1 votes

我们在Drupal站点目录中有一个非常类似的问题。 问题是Drupal发行版在较高级别的drupal目录中具有一个.gitignore文件,该文件与drupal / sites / files / *中的任何内容匹配

Al Crowley answered 2019-10-08T22:49:40Z
translate from https://stackoverflow.com:/questions/11126292/trouble-un-ignoring-previously-ignored-files-in-git-repo