Elimine el directorio del repositorio remoto después de agregarlos.gitignore


Confirmé y envié un directorio a github. Después de eso, alteré el archivo .gitignore añadiendo un directorio que debería ser ignorado. Todo funciona bien, pero el directorio (ahora ignorado) permanece en github.

¿Cómo elimino ese directorio de github y del historial del repositorio?

Author: melpomene, 2011-10-28

7 answers

Las reglas en su archivo .gitignore solo se aplican a archivos sin seguimiento. Dado que los archivos bajo ese directorio ya estaban confirmados en su repositorio, debe eliminarlos, crear una confirmación y enviarla 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 reescribir el historial de su repositorio; no debe hacer esto si alguien más está trabajando con su repositorio, o lo está utilizando desde varios equipos. Si todavía quieres hacer eso, puedes usar git filter-branch para reescriba la historia - hay una guía útil para eso aquí.

Además, tenga en cuenta que la salida de git rm -r --cached some-directory será algo así 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.

 811
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-19 20:52:23

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

Que eliminará todos los archivos / carpetas que están en tu git ignore, ahorrándote 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
 207
Author: Blundell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-24 17:54:14

Según mi respuesta aquí: ¿Cómo eliminar un directorio del repositorio git?

Para eliminar la carpeta/directorio solo desde el repositorio git y no desde el local, prueba 3 sencillos pasos.


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 próximas confirmaciones

Para ignorar esa carpeta de las siguientes confirmaciones haga un archivo en la raíz llamado .gitignore y poner el nombre de las carpetas en él. Puedes poner tantos como usted quiere

.gitignore el archivo se verá así

/FolderName

eliminar directorio

 35
Author: eirenaios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:36

La respuesta de Blundell debería funcionar, pero por alguna razón bizar 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
 4
Author: Chris Aelbrecht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-30 13:04:14

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 compruebe los archivos que se eliminarán primero ejecutando la siguiente declaración:

git ls-files -i --exclude-from=.gitignore

Estaba usando un valor predeterminado .gitignore archivo para visual studio y me di cuenta de que estaba eliminando todas las carpetas de registro y bin en el proyecto que no era mi acción prevista.

 4
Author: Oncel Umut TURER,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 12:14:26

Nota: Esta solución solo funciona con Github Desktop GUI.

Usando Github Desktop GUI es muy simple.

  1. Mueva la carpeta a otra ubicación (a fuera de la carpeta del proyecto) temporalmente.

  2. Edite su archivo .gitignore y elimine la entrada de la carpeta que sería eliminar repositorio maestro en la página de github.

  3. Confirmar y sincronizar la carpeta del proyecto.

  4. Volver a mover la carpeta al proyecto carpeta

  5. Re-edit .gitignore archivo.

Eso es todo.

 2
Author: efkan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-21 09:55:27

Si está trabajando desde PowerShell, pruebe 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

 0
Author: Shaun Luttin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-25 22:09:10