我的网站有/sites/default/files/
目录,通常会保留用户内容。想到我不需要跟踪这些东西,我将/ sites / default / files /添加到我的.gitignore文件中。
然后我发现我也希望在该目录中保留一些主要是永久性的上传内容。现在跟踪/ sites / default / files /中的所有内容更有意义,并排除不需要的子目录,而不是反过来做。
问题是Git不会停止忽略该目录。我已从.gitignore中删除了指定此目录的行,但它不会跟踪它。我可以选择使用git add /sites/default/files/ -f
强制git跟踪目录,但我之前已经这样做了,看起来很乱。
如果.gitignore不再指定该目录为忽略,为什么我必须强制Git开始跟踪这些文件?
答案 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 .'?
为了开始跟踪以前忽略的文件或模式:
cd <path>
将工作目录更改为存储库。git add -f <file name>.extension
或对于所有excel文件键入git add -f *.xlsx
来跟踪它们。对于我的情况,这忽略了被忽略的文件。您也可以选中此YouTube video。