studio - gitignore python
Eliminar directorio del repositorio remoto después de agregarlos a.gitignore (7)
Me comprometí y empujé algún directorio a github. Después de eso, modifiqué el archivo .gitignore
agregando un directorio que debería ignorarse. Todo funciona bien, pero el directorio (ahora ignorado) permanece en github.
¿Cómo elimino ese directorio de github y el historial del repositorio?
Hago esto:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
git commit -m ''Removed all files that are in the .gitignore''
git push origin master
Lo que eliminará todos los archivos / carpetas que están en tu git ignorar, guardando que tienes que elegir cada uno manualmente
Esto parece haber dejado de funcionar para mí, ahora lo hago:
git rm -r --cached .
git add .
git commit -m ''Removed all files that are in the .gitignore''
git push origin master
La primera respuesta de Blundell no funcionó para mí. Sin embargo me mostró el camino correcto. He hecho lo mismo así:
> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m ''Removed all files that are in the .gitignore''
> git push origin master
Le aconsejo que verifique los archivos que se eliminarán primero ejecutando la siguiente declaración:
git ls-files -i --exclude-from=.gitignore
Estaba usando un archivo .gitignore predeterminado para Visual Studio y noté que estaba eliminando todas las carpetas de registro y bin en el proyecto, lo cual no era mi acción prevista.
La respuesta de Blundell debería funcionar, pero por alguna extraña razón no funcionó conmigo. Tuve que canalizar primero los nombres de archivo emitidos por el primer comando en un archivo y luego recorrer ese archivo y eliminar ese archivo uno por uno.
git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m ''Removed all files that are in the .gitignore''
git push origin master
Las reglas de su archivo .gitignore
solo se aplican a archivos sin seguimiento. Dado que los archivos de ese directorio ya se confirmaron en su repositorio, debe desinstruirlos, crear un compromiso y enviarlo a GitHub:
git rm -r --cached some-directory
git commit -m ''Remove the now ignored directory "some-directory"''
git push origin master
No puede eliminar el archivo de su historial sin volver a escribir el historial de su repositorio; no debe hacer esto si alguien más está trabajando con su repositorio o lo está utilizando desde múltiples computadoras. Si aún desea hacer eso, puede usar git filter-branch
para reescribir el historial; aquí encontrará una guía útil .
Además, tenga en cuenta que la salida de git rm -r --cached some-directory
será algo como:
rm ''some-directory/product/cache/1/small_image/130x130/small_image.jpg''
rm ''some-directory/product/cache/1/small_image/135x/small_image.jpg''
rm ''some-directory/.htaccess''
rm ''some-directory/logo.jpg''
El rm
es la retroalimentación de git sobre el repositorio; Los archivos todavía están en el directorio de trabajo.
Nota: esta solución solo funciona con Github Desktop GUI .
Al usar Github Desktop GUI es muy simple.
Mueva la carpeta a otra ubicación (fuera de la carpeta del proyecto) temporalmente.
Edite su archivo
.gitignore
y elimine la entrada de la carpeta que sería eliminar el repositorio maestro en la página github.Confirma y sincroniza la carpeta del proyecto.
Re-mover la carpeta a la carpeta del proyecto
.gitignore
archivo.gitignore
.
Eso es todo.
Según mi respuesta aquí: ¿Cómo eliminar un directorio del repositorio git?
Para eliminar la carpeta / directorio solo del repositorio de git y no de los sencillos pasos de la prueba local 3.
Pasos para eliminar el directorio
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Pasos para ignorar esa carpeta en las siguientes confirmaciones.
Para ignorar esa carpeta de las siguientes confirmaciones, cree un archivo en la raíz llamado .gitignore y ponga ese nombre de carpeta en ella. Puedes poner tantas como quieras
El archivo .gitignore se verá así
/FolderName
Si está trabajando desde PowerShell, intente lo siguiente como un solo comando.
PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .///path///to///directory"
>> --prune-empty --tag-name-filter cat -- --all
Entonces, git push --force --all
.
Documentación: https://git-scm.com/docs/git-filter-branch