无法在Git repo中取消忽略以前忽略的文件

2ledvvac  于 2023-09-29  发布在  Git
关注(0)|答案(6)|浏览(151)

我有一个站点,它有一个/sites/default/files/目录,用户内容通常保存在该目录中。考虑到我不需要跟踪这些东西,我将/sites/default/files/添加到我的.gitignore文件中。
然后我发现我也想在这个目录中保留一些永久的上传。现在更有意义的做法是跟踪/sites/default/files/中的所有内容并排除不需要的子目录,而不是反过来做。
问题是Git不会停止忽略该目录。我已经从.gitignore中删除了指定此目录的行,它不会跟踪它。我可以选择使用git add /sites/default/files/ -f来强制git跟踪目录,但我以前做过,看起来很混乱。
如果.gitignore不再指定该目录为忽略,为什么我必须强制Git开始跟踪这些文件?

lx0bsm1f

lx0bsm1f1#

你已经知道怎么做了。git add -f就是这样。
如果你问为什么...这是因为git在内部设置了assume-unchanged位。这一点会让git认为文件没有被修改,所以git add不会添加它。
如果你想弄清楚实现细节,你可以使用git update-index --no-assume-unchanged <file>命令。

nnsrf1az

nnsrf1az2#

我不认为J-16是正确的。http://www.kernel.org/pub/software/scm/git/docs/git-add.html
默认情况下,git add命令不会添加忽略的文件。如果在命令行中显式指定了任何被忽略的文件,git add将失败,并显示一个被忽略的文件列表。通过Git执行的目录递归或文件名globbing(在shell之前引用你的globs)所忽略的文件将被默默忽略。git add命令可以使用-f(force)选项添加忽略的文件。
git add -f似乎只用于添加一个文件,该文件确实存在于某个忽略文件中。
也许在/sites或/sites/default中有另一个.gitignore文件,它也告诉Git忽略这个目录,或者它已经在.git/info/exclude中设置了?

rjjhvcjd

rjjhvcjd3#

为子孙后代:我的问题的答案是“只要仔细看看”。
@twalberg正确地指出,在.gitignore文件中可能有一条我忽略的规则。应用.gitignore规则的级联方式使排除文件的范围超出预期范围变得容易。
据我所知,我对git工作原理的假设是正确的。同样,我的案例似乎并不支持(或反驳)@J-16 SDiZ关于assume-unchanged位可能扮演什么角色的评论。

sshcrbum

sshcrbum4#

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

8yparm6h

8yparm6h5#

如果你通过git staging错误地点击了Eclipse git中忽略的选项,那么要取回你的文件,请执行以下操作:
1.打开git bash

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

mwg9r5ms6#

在我的例子中,.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>将工作目录更改为存储库。
1.其次,您需要指定文件或模式来跟踪它们,方法是为特定文件键入git add -f <file name>.extension,或为所有excel文件键入git add -f *.xlsx
这不忽略了我的情况下被忽略的文件。您也可以检查此YouTube video

相关问题