无法忽略 Git 存储库中之前忽略的文件

问题描述 投票:0回答:7

我有一个网站,有一个

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

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

问题是 Git 不会停止忽略该目录。我已从 .gitignore 中删除了指定此目录的行,并且它不会跟踪它。我可以选择使用

git add /sites/default/files/ -f
来强制 git 跟踪目录,但我之前已经这样做过,而且看起来很混乱。

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

git gitignore
7个回答
80
投票

你已经知道怎么做了。是的,

git add -f
就是这样。

如果你问为什么......这是因为 git 在内部设置了一个

assume-unchanged
位。这一点让 git 认为该文件没有被修改,所以
git add
不会添加它。

如果你想搞乱实现细节,你可以使用

git update-index --no-assume-unchanged <file>
命令。


13
投票

我不认为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 中设置?


11
投票

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

@twalberg 正确地指出,.gitignore 文件中可能存在我忽略的规则。应用 .gitignore 规则的级联方式可以轻松排除比预期更广泛的文件。

据我所知,我对 git 工作原理所做的假设是正确的。同样,我的案例似乎并不支持(或反驳)@J-16 SDiZ 关于

assume-unchanged
位可能发挥什么作用的评论。


2
投票

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


2
投票
如果您通过 git staging 错误地单击了忽略的选项 ion Eclipse git,则要取回文件,请执行以下操作:

    打开你的 git bash
  1. git status --ignored
    在此处执行此命令,您忽略的文件将显示
  2. 复制该文件的路径
  3. git add -f <file path>
     [-f 之后添加文件路径]
  4. git status
    
    
  5. 文件将可见

1
投票
就我而言,存储库中忽略了

.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. 其次,您需要指定文件或模式来跟踪它们,方法是为特定文件输入
  3. git add -f <file name>.extension
    ,或为所有 Excel 文件输入 
    git add -f *.xlsx
这忽略了我的案例中被忽略的文件。您还可以查看此

YouTube 视频


0
投票
如果你使用的是eclipse/STS,那么你可以这样做:

    右键单击要取消忽略的文件。
  1. 点击“
  2. 团队”发布该内容。
  3. 选择“
  4. 高级”。
  5. 最后点击“
  6. 不假设不变
  7. 现在您可以看到您的文件未被忽略。
© www.soinside.com 2019 - 2024. All rights reserved.