Ruby on rails 为什么我从Github得到一个关于我在gitignore中列出的文件的大文件警告?

Ruby on rails 为什么我从Github得到一个关于我在gitignore中列出的文件的大文件警告?,ruby-on-rails,git,github,gitignore,delete-file,Ruby On Rails,Git,Github,Gitignore,Delete File,我一直在提交并将开发中使用的图像推送到我的Github存储库,但没有真正考虑到这一点 在发现这会导致我无法将项目推送到分支机构的问题后,我搜索了一个解决方案,从存储库中删除这些图像,然后将这些图像添加到gitignore文件中 我找到了几个解决方案:,还有一些其他的。他们似乎都在以同样的方式逼我: git rm --cached -r /public/uploads/image/file/** 我已经运行了这段代码的一些变体,比如删除**,文件/**,--cached,和图像/文件/**,但

我一直在提交并将开发中使用的图像推送到我的Github存储库,但没有真正考虑到这一点

在发现这会导致我无法将项目推送到分支机构的问题后,我搜索了一个解决方案,从存储库中删除这些图像,然后将这些图像添加到gitignore文件中

我找到了几个解决方案:,还有一些其他的。他们似乎都在以同样的方式逼我:

git rm --cached -r /public/uploads/image/file/** 
我已经运行了这段代码的一些变体,比如删除
**
文件/**
--cached
,和
图像/文件/**
,但这并没有改变我仍然可以在GitHub分支上看到文件的事实

我还将此添加到我的gitignore文件中:
/public/uploads/image/file/**

但当我推到存储库分支时,我会得到以下信息,告诉我为什么不能推到Github:

我从
git add.
开始查找上下文

ruby 2.3.3-p222
╳  project_name categories ◆ git add .                                                               

ruby 2.3.3-p222
╳  project_name categories ◆ git commit -m "trying to get a commit in after purging development environment image data"
[categories 8c13b0a] trying to get a commit in after purging development environment image data
 1 file changed, 1 insertion(+), 3 deletions(-)

ruby 2.3.3-p222
╳  project_name categories  git push origin categories                                               
Counting objects: 3840, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3664/3664), done.
Writing objects: 100% (3672/3672), 163.83 MiB | 3.98 MiB/s, done.
Total 3672 (delta 1242), reused 0 (delta 0)
remote: Resolving deltas: 100% (1242/1242), completed with 57 local objects.
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: 85ba931580b369a222fcf5903416f84e
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File public/uploads/image/file/30/show_55MiEk4_-_Imgur.gif is 119.49 MB; this exceeds GitHub's file size limit of 100.00 MB
To git@github.com:Lenocam/project_name.git
 ! [remote rejected] categories -> categories (pre-receive hook declined)
error: failed to push some refs to 'git@github.com:Lenocam/project_name.git'
所以,现在我很困惑,因为在我的gitignore文件中添加
/public/uploads/image/file/**
不会让git忽略文件夹和其中的文件吗?为什么文件继续被推送到我的存储库

在我看来,我已经要求git/Github(通过terminal命令)清除那些旧文件,并完全忘记它们曾经存在过,这样他们就不会再问我关于它们的事了(通过gitignore)

我想我做了一些不正常或不正确的事情。如果您能给我任何帮助,我将不胜感激

git rm--缓存的-r/public/uploads/image/file/**

您已将文件添加到.gitignore,该文件已添加到git。 看起来您的忽略模式与文件模式不匹配

public/uploads/image/file/30/show_55MiEk4_-_Imgur.gif 
将以下模式添加到.gitignore

/public/uploads/image/file/**/**
你必须先把它取下来,然后再推一次

git rm --cached <file>
git commit -m "Message"

git push ....
git-rm——缓存
git提交-m“消息”
吉特推。。。。
git rm--缓存的-r/public/uploads/image/file/**

您已将文件添加到.gitignore,该文件已添加到git。 看起来您的忽略模式与文件模式不匹配

public/uploads/image/file/30/show_55MiEk4_-_Imgur.gif 
将以下模式添加到.gitignore

/public/uploads/image/file/**/**
首先,您必须移除它,而不是再次推它

git rm --cached <file>
git commit -m "Message"

git push ....
git-rm——缓存
git提交-m“消息”
吉特推。。。。
.gitignore
不会真正忽略文件 在Git中,如果文件在索引中,并且仅当文件在索引中时才跟踪该文件。1

如果索引中有一个文件,并且您进行了新的提交,则该文件将进入提交。无论文件名是否在
.gitignore
中,都会发生这种情况

一旦文件处于提交状态,它将永远处于该提交状态。避免它的唯一方法是完全停止使用提交

.gitignore
所做的就是让Git停止抱怨。对于工作树中的每个文件,2但不在索引中,Git抱怨说:“嘿,这个文件在工作树中,但不在索引中!也许你应该添加它!”但是一些确实属于工作树的文件不属于任何提交,因此不应该进入索引

将文件或匹配的全局模式(例如,任何使用
*
***
-的内容)放入
.gitignore
告诉Git:“不要抱怨,而且,如果它不在索引中,也不要使用
Git add-a
等自动添加它。”但它不会将文件移出索引,实际上,它不能从任何现有的提交中删除该文件

要从索引中删除文件,而不将其从工作树中删除,请使用
git rm--cached
.3

您不仅在索引中拥有(或拥有)该文件,这意味着
git add-A
会在索引中更新该文件,而且在尚未推送的某个提交中也拥有该文件。因此,将其从索引中删除是不够的。必须放弃包含大文件的每个提交

为此,您可能希望使用
git-rebase-i
将提交(或那些提交)复制到一个新的和改进的版本,其中的改进只是“不在提交中包含文件”

另见


1索引是构建下一次提交的位置。它本身不是提交,但当您运行
git commit
时,git会打包索引内容以进行新的提交

2工作树只是您处理文件的地方,因为Git索引和Git提交中的文件形式对于正常工作是不可用的

3请注意,由于两个原因,您不应该让shell扩展您在
.gitignore
文件中使用的任何glob模式。首先,shell扩展可能与Git所做的不匹配。具体来说,并非所有shell都能展开
**
,而那些展开的shell并不总是以相同的方式展开。其次,工作树的内容可能与索引内容有很大的不同:例如,如果工作树中有
public/uploads/image/file/1
,但索引中没有,那么查看工作树的shell可能会在其全局扩展中包含该内容,而Git在执行
Git rm
时只查看Git的索引,不会将其放在要删除的文件列表中,一旦Git找到一个无法从索引中删除的文件,它就会停止删除其他文件。

。gitignore
不会真正忽略文件 在Git中,当且仅当文件位于索引中时,才会对其进行跟踪。1

如果索引中有一个文件,并且您进行了新的提交,则该文件将进入提交。无论文件名是否在
.gitignore
中,都会发生这种情况

一旦文件处于提交状态,它将永远处于该提交状态。避免它的唯一方法是完全停止使用提交

.gitignore
所做的就是让Git停止抱怨。对于工作树中的每个文件,2但不在索引中,Git抱怨:“嘿,这个文件