for - git lfs version
Mover archivos rastreados Git LFS bajo Git regular (4)
Hace poco me encontré con este problema donde los activos se agregaron accidentalmente a git-lfs en una rama que no debería haber sido. Mi solución fue:
git lfs untrack ''<file-type>''
git rm --cached ''<file-type>''
git add ''<file-type>''
git commit -m "restore ''<file-type>'' to git from lfs"
El resultado es una reescritura de los punteros sha256 de git-lfs oid con el contenido del archivo estándar.
Tengo un proyecto donde almacené archivos de video con Git LFS. Ahora me encontré con algunas complicaciones con mi servidor de compilación que aún no es compatible con Git LFS. Como es un servicio externo, realmente no puedo afectar el proceso de compilación, por lo que me gustaría mover los archivos de debajo de Git LFS a Git "normal". Logré deshacer el seguimiento de los tipos de archivos con git lfs untrack ''<file-type>''
pero git lfs ls-files
aún ofrece una lista de los archivos agregados anteriormente.
Me imagino que podría eliminar los archivos, empujar los cambios y luego volver a agregarlos manualmente, pero ¿es esta realmente la forma recomendada de hacer las cosas?
Realmente no puede eliminar nada de GIT LFS, y aunque las soluciones presentadas aquí pueden funcionar (con modificaciones), requieren mucho esfuerzo y pueden tener efectos secundarios en su repositorio.
Si llegó aquí, es hora de preguntarse si desea administrar sus archivos grandes con GIF LFS y si el propio GIT (que es inherentemente malo en la administración de archivos grandes, porque es un sistema de control de versiones distribuido) fue una buena opción.
Si tiene muchos archivos grandes y es una sola organización que trabaja en su proyecto, algo como Subversion puede funcionar mejor para usted.
Tuve problemas haciendo pasos en Windows. Para eliminar todos los archivos seguidos de git lfs y restaurar el archivo original, hice lo siguiente en git bash:
Eliminado .gitattributes
git lfs ls-files | cut -d '' '' -f 3 > lfs-files.txt
3. mientras se lee el archivo; do git lfs untrack "$ file"; git rm --cached "$ file"; git add --force "$ file"; hecho
El número 641 menciona el mismo problema.
Intenté dejar de usar Git LFS, pero no encontré ninguna manera de revertir mis archivos de punteros rastreados anteriores usando
git lfs uninit
,git lfs untrack
,git rm
... después de mover esos archivos nuevamente, sigue apareciendo como Git LFS congit lfs ls-files
, ¿cómo puedo excluir todo el contenido de Git LFS de mi repositorio?
La respuesta fue:
- Elimine todas las entradas de configuración de filter.lfs. * Git con
git lfs uninit
.- Borre cualquier atributo que use el filtro lfs en
.gitattributes
ejecutandogit lfs untrack
para cada tipo de archivo, o eliminando.gitattributes
si LFS es todo para lo que lo usó.
Después de esto, cualquier archivo agregado irá directamente a git.
Pero esto no era tan simple:
Más tarde termino con los archivos de puntero LFS en mi directorio de trabajo y tengo que recuperar todas mis imágenes de
.git/lfs
usando el hash sha1 almacenado en esos punteros manualmente.
Actualización de marzo de 2016, el problema 957 ilustra una posible solución de tstephens619
:
Cometí el mismo error de incluir varios formatos de gráficos pequeños en mi lista de seguimiento de
git lfs
.
Pude mover estos archivos de nuevo a git haciendo lo siguiente:
Cree una lista de todos los archivos que están siendo rastreados actualmente por
git-lfs
, filtre*.gz
y*.rpm
(quiero seguir rastreando esas extensiones congit-lfs
)
git lfs ls-files | grep -vE "/.gz|/.rpm$" | cut -d '' '' -f 3 > ~/temp/lfs-files.txt
Deja de rastrear los pequeños archivos gráficos
git lfs untrack "*.tts" git lfs untrack "*.bfx" git lfs untrack "*.ttf" git lfs untrack "*.xcf" git lfs untrack "*.pkm" git lfs untrack "*.png"
Temporalmente uninit
git-lfs
git lfs uninit # Git LFS 2.x+ git lfs uninstall
Usa la lista de archivos para tocar cada archivo:
cat ~/temp/lfs-files.txt | xargs touch
git status
ahora mostrará cada archivo como modificado.
Agregar los cambios al índice de git (lo hice a través de
git gui
)cometer los cambios y luego reiniciar git-lfs
git commit git lfs init
El mantenedor ttaylorr
agrega:
Una forma de hacer esto sería:
for file in $FILES_TO_REVERT; do
git lfs untrack "$file";
git rm --cached "$file";
git add --force "$file";
done
git commit -m "..."
Mi preferencia sería no agregar un comando a Git LFS al efecto anterior, ya que es posible de varias maneras diferentes con los comandos de porcelana proporcionados por Git y Git LFS