¿Cómo eliminar un directorio del repositorio de git?

1236

Tengo 2 directorios en mi repositorio de GitHub. Me gustaría eliminar uno de ellos. ¿Cómo podría hacer eso sin eliminar y volver a crear todo el repositorio?

Sahat Yalkabov
fuente
1
¿Hay algún archivo en los directorios?
Fred Foo
3
@Iarsmans: Sí, 6 archivos. Ambos directorios son idénticos, excepto que uno está en mayúsculas y otro en minúsculas.
Sahat Yalkabov

Respuestas:

2328

Eliminar el directorio de git y local

Puede pagar 'master' con ambos directorios;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Eliminar el directorio de git pero NO local

Como se menciona en los comentarios, lo que generalmente desea hacer es eliminar este directorio de git pero no eliminarlo por completo del sistema de archivos (local)

En ese caso, use:

git rm -r --cached myFolder
karmakaze
fuente
8
Tuve la misma situación exacta. Cuando lo intenté git rm -r myFolderfuncionó, pero también eliminé todo del directorio "MyFolder". Tuve que revertir todo en el directorio "MyFolder" y luego confirmar.
Justin
240
@Justin Para eliminar solo de git y dejar el sistema de archivos como está, usegit rm -r --cached myFolder
karmakaze el
32
El mensaje de error que recibo es: fatal: el 'directorio' de la ruta de acceso no coincide con ningún archivo.
user2441441
3
@ user2441441 Recibí este error cuando intentaba eliminar una carpeta / archivo que no se agregó al repositorio en absoluto
lukeatdesignworks
3
git rm -r --cached directory/solo se elimina de git rastreado, pero la estructura del repositorio permanece.
Néstor
287

Para eliminar la carpeta / directorio solo del repositorio de git y no del local, pruebe 3 comandos simples.


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 próximas confirmaciones, cree un archivo en la raíz llamado .gitignore y coloque el nombre de esa carpeta en él. Puedes poner tantos como quieras

El archivo .gitignore se verá así

/FolderName

eliminar directorio

Eirenaios
fuente
1
También necesitará hacer git rm -r --cached FolderName git commit -m "Carpeta eliminada del repositorio" en su otra computadora y luego hacer un tirón para mantenerlo sincronizado.
Simon
1
¿Esto eliminará el directorio desde el punto en que se agregó al repositorio hasta ahora? ¿O es solo para eliminar el directorio y volver a comprometerlo con el repositorio .git?
alpha_989
1
¡Excelente! ¡Trabajando!
BeingCoders
2
Bien explicado, buena respuesta
Rakshit Shah el
1
bien hecho. En mi máquina, el tercer paso no funciona. Pero funciona si se cambia a $ git push
Hong
82

Si, por alguna razón, lo que dice karmakaze no funciona, puede intentar eliminar el directorio que desea usar o con el navegador del sistema de archivos (por ejemplo, en el Explorador de archivos de Windows). Después de eliminar el directorio, emitir el comando:
git add -A
y luego
git commit -m 'deleting directory'
y luego
git push origin master.

cmcculloh
fuente
44
Esto funcionó para mí. ¿Podría explicar el argumento -A?
Arun
2
@Arun -A es la abreviatura de --todos y agrega cambios de todos los archivos rastreados y no rastreados
Joachim Rohde
Esto funcionó para mí.
UVM
20

Puedes probar esto: git rm -rf <directory_name>

Obligará a eliminar el directorio.

Breen ho
fuente
3
esto también se eliminará del directorio local
abdul rehman kk
18

Si elimina los archivos en el directorio (con lo git rmque explican las otras respuestas), entonces el directorio ya no existe en lo que respecta a git. No puede confirmar un directorio vacío, ni puede eliminar uno.

Esto es diferente a la subversión donde tiene que hacerlo explícitamente svn rm emptyfolder/, y por cierto la manpágina de git se describe a sí misma como "el rastreador de contenido estúpido"

Una respuesta sobre "Cómo agrego un directorio vacío a un repositorio de git" enlaza con las preguntas frecuentes sobre este tema :

Actualmente, el diseño del índice git (área de preparación) solo permite que se enumeren los archivos, y nadie lo suficientemente competente como para realizar el cambio para permitir directorios vacíos se ha preocupado lo suficiente por esta situación para remediarlo.

Los directorios se agregan automáticamente al agregar archivos dentro de ellos. Es decir, los directorios nunca tienen que agregarse al repositorio y no se rastrean por sí mismos.

Puede decir " git add <dir>" y agregará archivos allí.

Si realmente necesita que exista un directorio en las cajas, debe crear un archivo en él. .gitignore funciona bien para este propósito; puede dejarlo vacío o completar los nombres de los archivos que espera que aparezcan en el directorio.

dbr
fuente
9

Ya había comprometido la carpeta antes y quiero eliminar el directorio en el historial también.

Hice lo siguiente:

Agregar carpeta a .gitignore:

echo Folder_Name/ >> .gitignore

Eliminar de todas las confirmaciones:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

eliminar las referencias de los viejos commits:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Asegúrese de que todas las referencias antiguas se eliminen por completo

rm -Rf .git/logs .git/refs/original

Realizar una recolección de basura

git gc --prune=all --aggressive

empujar sus cambios al repositorio en línea:

git push

Ya terminaste aquí.

Pero puede hacer lo siguiente para empujar todos los cambios a todas las ramas con: ¡Pero tenga cuidado con este comando!

git push origin --all --force
git push origin --tags --force

Después de eso, la carpeta se eliminó de git, pero no se eliminó del disco local.

Skyborg
fuente
7

para eliminar carpetas vacías

Quería eliminar un directorio vacío (carpeta) que creé, git no puede eliminarlo, después de algunas investigaciones aprendí que Git no rastrea directorios vacíos. Si tiene un directorio vacío en su árbol de trabajo, simplemente debe eliminarlo con

rm -r folderName

No hay necesidad de involucrar a Git.

Ridha Rezzag
fuente
1
¡Gracias! Eso es justo lo que necesitaba.
SpyrosKo
6

Vaya a su directorio git y luego escriba el siguiente comando: rm -rf < Nombre del directorio >

Después de eliminar el directorio, confirme los cambios: git commit -m "Su mensaje de confirmación"

Luego, simplemente presione los cambios en el directorio GIT remoto: git push origin < Nombre de la sucursal >

anky
fuente
4

Puede eliminar la carpeta localmente y luego presionar, como sigue:

git rm -r folder_name
git commit -m "your commit"
git push origin master
shrikant
fuente
4

Usualmente uso git add --allpara eliminar archivos / carpetas de repositorios remotos

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master puede ser reemplazado por cualquier otra rama del repositorio.

ettanany
fuente
2

Puede usar el Árbol de fuentes de Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Simplemente seleccione los archivos del árbol y presione el botón "Eliminar" en la parte superior. Los archivos se eliminarán del repositorio local y la base de datos local de git. Luego comprometerse, luego empujar.

Sergey Groshev
fuente
Esto es lo que hago también. Sin embargo, ha sido muy fácil de hacer, aprender comandos de git es algo bueno para saber.
Micah Montoya
1

Uno de mis colegas sugirió BFG Repo-Cleaner, que creo que es poderoso. No solo elimina datos no deseados, sino que también limpia su repositorio de cualquier información de confirmación relacionada.

gracias.h.le
fuente
1

Para agregar un nuevo directorio:

mkdir <YOUR-DIRECTORY>

Pero ahora Git no está al tanto de este nuevo directorio, porque Git realiza un seguimiento de los archivos, no de los directorios. DIRECTORIO

git status

Git no se dará cuenta del cambio que hemos realizado, por lo que agregamos un .keeparchivo oculto para que Git lo note con este nuevo cambio.

touch /YOUR-directory/.keep

Ahora, si golpeas a git statusGit , estarás al tanto de los cambios.

Y si desea eliminar el directorio, debe usar este comando.

rm -r <YOUR-DIRECTORY>

Y si marcó usando git status, verá que el directorio se ha eliminado.

Abo3atef
fuente
0

El primer comando git necesita saber quién eres antes de eliminar algo

  1. git init
  2. git config user.name "alguien"
  3. git config user.email "[email protected]"
  4. git rm -r
  5. git commit -m "eliminando directorio"
  6. maestro de origen de empuje git
Zeus
fuente
0

Una combinación de las 2 respuestas me funcionó

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

si aún muestra alguna advertencia, elimine los archivos manualmente

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