在 Git repo 中解决忽略以前忽略的文件的问题

我有一个网站,其中有一个 /sites/default/files/目录用户内容通常保存。考虑到我不需要跟踪这些东西,我将/site/default/files/添加到。吉蒂诺档案。

然后我发现我还想在那个目录中保留一些大部分是永久性的上传。现在更有意义的做法是跟踪/site/default/files/中的所有内容,并排除不需要的子目录,而不是反过来做。

问题是 Git 不会停止忽略该目录。我已经把线从。指定这个目录的 gitignore,它不会跟踪它。我可以选择使用 git add /sites/default/files/ -f强制 git 跟踪目录,但是我以前也这样做过,而且看起来很混乱。

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

44332 次浏览

你已经知道怎么做了。是的,git add -f是方法。

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

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

我不认为 J-16是正确的:

默认情况下,git add 命令不会添加被忽略的文件。如果在命令行上显式指定了任何被忽略的文件,git add 将失败,并出现被忽略文件的列表。Git 执行的目录递归或文件名 globbing 所到达的被忽略的文件(在 shell 之前引用您的 globb)将被静默地忽略。Git add 命令可以使用-f (force)选项添加被忽略的文件。

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

也许还有别的办法。也告诉 Git 忽略这个目录,或者它已经被设置为。Git/info/ 排除?

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

@ twalberg 正确地指出,我可能忽略了一条规则。吉蒂诺档案。控件的级联方式。Gitignore 规则的应用使得排除文件的范围比预期的更广。

据我所知,我对 Git 工作原理的假设是正确的。同样,我的案例似乎并不支持(或反驳)@J-16 SDiZ 关于 assume-unchanged位可能发挥什么作用的评论。

我们在 Drupal 站点目录中遇到了非常类似的问题。问题是 Drupal 分布有一个。更高级别 drupal 目录中匹配 drupal/site/files/* 中任何内容的 gitignore 文件

在我的案例中,.png.xlsx文件在回购中被忽略。正如@dou1ejack、@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 视频

如果你错误地点击了被忽略的选项 Eclipse git through git stage,那么要返回你的文件需要做以下事情:

  1. 打开你的 Git Bash
  2. 在这里执行这个 cmd 将显示被忽略的文件
  3. 复制该文件的路径
  4. git add -f <file path>[ add file path after-f ]
  5. git status
  6. 文件将可见