麻烦在Git repo中忽略以前忽略的文件

时间:2012-06-20 18:55:28

标签: git gitignore

我的网站有/sites/default/files/目录,通常会保留用户内容。想到我不需要跟踪这些东西,我将/ sites / default / files /添加到我的.gitignore文件中。

然后我发现我也希望在该目录中保留一些主要是永久性的上传内容。现在跟踪/ sites / default / files /中的所有内容更有意义,并排除不需要的子目录,而不是反过来做。

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

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

5 个答案:

答案 0 :(得分:65)

你知道怎么做。是的,git add -f就是这样。

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

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

答案 1 :(得分:11)

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

  

默认情况下,git add命令不会添加被忽略的文件。如果在命令行中显式指定了任何被忽略的文件,git add将失败并显示一个被忽略的文件列表。由Git执行的目录递归或文件名通配所达到的忽略文件(在shell之前引用你的globs)将被默默忽略。 git add命令可用于使用-f(强制)选项添加被忽略的文件。

git add -f似乎只是为了在某处的忽略文件中添加确实的文件。

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

答案 2 :(得分:6)

对于后代:我的问题的答案是“只是仔细观察”。

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

就我而言,在仓库中忽略了.png.xlsx文件。正如@ doub1ejack,@ J-16 SDiZ和其他人所述,您需要使用git add -f来跟踪更改。但是,git add -f不起作用,除非您明确指定文件或模式并以以下方式响应

Nothing specified, nothing added.

Maybe you wanted to say 'git add .'?

为了开始跟踪以前忽略的文件或模式:

  1. 首先,您需要通过输入cd <path>将工作目录更改为存储库。
  2. 第二,您需要指定文件或模式以通过对特定文件键入git add -f <file name>.extension或对于所有excel文件键入git add -f *.xlsx来跟踪它们。

对于我的情况,这忽略了被忽略的文件。您也可以选中此YouTube video