No se puede enviar a Git, debido a files binarys

Así que he estado teniendo problemas para llegar a mi sucursal principal que he estado trabajando debido a algunos files de video binarys. Los files eran demasiado grandes cuando traté de empujarlos la primera vez. Así que los eliminé del directory del proyecto en el que estaba trabajando. Pero ahora, cuando bash presionar desde ese primer impulso inicial, me devuelve este post de error.

Compressing objects: 100% (38/38), done. Writing objects: 100% (39/39), 326.34 MiB | 639.00 KiB/s, done. Total 39 (delta 16), reused 0 (delta 0) remote: error: GH001: Large files detected. remote: error: Trace: b7371dc6457272213ca1f568d9484c49 remote: error: See http://git.io/iEPt8g for more information. remote: error: File themes/SomeFile/uploads/me_582610_mountain-river.mov is 315.08 MB; this exceeds GitHub's file size limit of 100 MB To git@github.com:UserName/Project.git 

El file que dice es demasiado grande y parece que todavía está allí de alguna manera no está realmente en mi directory o incluso en mi computadora. Lo eliminé por completo ¿Cuál es el problema aquí? Esta es la primera vez que tengo problemas con esto. Fui al sitio de Git al que se hace reference para get ayuda, https://help.github.com/articles/working-with-large-files/ , y ejecuté el git rm --cached me_582610_mountain-river.mov y me devolvió el post fatal: pathspec 'me_582610_mountain-river.mov' did not match any files

¡Por favor, cualquier ayuda sería muy apreciada!

Recuerde, de forma pnetworkingeterminada, todo lo que se compromete con git permanece en su repository, incluso si lo "elimina" en una confirmación posterior .

Una de las debilidades de GIT (junto con otras DVCS) es que no maneja muy bien los files binarys grandes. Muchos equipos / personas que desean versionar muchos files binarys grandes prefieren VCS centralizados como Perforce , Subversion , etc. donde uno tiene un mayor control sobre qué parte de un repository descarga y cuántas versiones de confirmaciones previas se mantienen en un repository.

Para su problema: tiene un repository en el que ha asignado previamente un file binary grande. Aunque posteriormente lo "eliminó" de su repository, el file permanece . Para eliminarlo por completo de su repository, tendrá que realizar algunas operaciones, destruyendo físicamente el compromiso original en el que se agregó el file y luego reescribiendo cada confirmación posterior en su repository.

Según la documentation de GIT sobre la eliminación de objects ( énfasis mío):

Hay muchas cosas buenas acerca de Git, pero una característica que puede causar problemas es el hecho de que un clon git descarga todo el historial del proyecto, incluida cada versión de cada file. Esto está bien si todo es código fuente, porque Git está altamente optimizado para comprimir esos datos de manera eficiente. Sin embargo, si alguien en algún momento de la historia de su proyecto agregó un solo file enorme, cada clon de todos los times se verá obligado a download ese file grande, incluso si fue eliminado del proyecto en la siguiente confirmación .

La solución a su problema no es un process simple, es destructivo (en el sentido de que básicamente reescribe cada confirmación después de la confirmación en la que incluyó los files ofensivos) y está bastante bien documentada en el enlace anterior que le animo a leer varias veces y practique en una copy local de su tree antes de actualizar su tree oficial.

Proceda con cuidado!

Si hace esto inmediatamente después de una import, antes de que alguien haya empezado a trabajar en la confirmación, está bien; de lo contrario, debe notificar a todos los queueboradores que deben volver a establecer su trabajo en sus nuevos compromisos.

Francamente, cuando hice esto hace un año o algo así con un repository mío (es decir, no compartido con nadie más), elegí copyr mi base de código actual a una nueva carpeta y crear un nuevo repository de GIT en lugar de intentarlo para reescribir toda mi historia, packages de files, etc. Perder la historia no era un problema importante para mí en ese momento.

¡Buena suerte!

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD

Eche un vistazo a bfg . ( https://rtyley.github.io/bfg-repo-cleaner/ ) Es la forma más fácil de eliminar ese file grande. ¡Pero las implicaciones con hacer esto mencionado en los otros comentarios todavía se aplican!