2010-01-05 15 views
31

Realicé una copia de seguridad de mi base de datos en GIT solo para poder obtener el DB en la computadora de mi casa.¿Cómo eliminar permanentemente un archivo almacenado en GIT?

No quiero que este archivo sea versionado, solo fue una cosa de una vez realmente.

¿Puedo eliminarlo definitivamente así que GIT no lo hace en el futuro o históricamente?

+0

posible duplicado de [Eliminar archivos sensibles y sus confirmaciones de la historia de Git] (http://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits- from-git-history) – CharlesB

+0

posible duplicado de [Eliminar completamente el archivo de todo el historial de confirmaciones del repositorio de Git] (http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit- historia) –

Respuesta

57

Siempre encuentro Guides: Completely remove a file from all revisions feed útil.

Para extraer el archivo llamado Rakefile:

git filter-branch --force --index-filter \ 
  'git rm --cached --ignore-unmatch Rakefile' \ 
  --prune-empty --tag-name-filter cat -- --all 

Este comando se ejecutará toda la historia de cada rama y etiqueta, cambiar ningún commit que involucró el archivo Rakefile, y ningún commit después. Confirma que están vacíos después (porque solo cambiaron el Rakefile) son eliminado por completo.

+3

gracias, eso realmente funciona! También puede agregar: git push --all --force –

+2

Gracias. Me llevó varios intentos porque no proporcioné la ruta de acceso relativa completa al archivo (desde la raíz), y solo tenía el nombre del archivo. – mdiehl13

+1

Recuerde advertir siempre a todos sus compañeros cuando esté a punto de hacer una reescritura de historial en un repositorio remoto ('git push --all --force'), o de lo contrario se enfrentarán a todo tipo de problemas al realizar una extracción. – pedromanoel

18

Actualización para remote repository:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all 

reemplazar FOLDERNAME con el archivo o carpeta que desea eliminar desde el repositorio git dado.

rm -rf .git/refs/original/ 

git reflog expire --expire=now --all 

git gc --prune=now 

git gc --aggressive --prune=now 

Ahora empuje todos los cambios en el repositorio remoto

git push --all --force 

Esto limpiar el repositorio remoto.

3

También puede usar bfg para mayor facilidad.

El BFG es una más sencilla, rápida alternativa a git-filter-branch para la limpieza de los malos datos de su Git historia repositorio:

Extracción loco archivos grandes contraseñas Quitar, Credenciales otra & datos privados

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA 

O simplemente reemplazar todas las ocurrencias de algún archivo:

$ bfg --replace-text passwords.txt 

cheque https://rtyley.github.io/bfg-repo-cleaner/ y https://help.github.com/articles/removing-sensitive-data-from-a-repository/

Cuestiones relacionadas