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?
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?
Respuestas:
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)
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
git rm -r myFolder
funcionó, pero también eliminé todo del directorio "MyFolder". Tuve que revertir todo en el directorio "MyFolder" y luego confirmar.
git rm -r --cached myFolder
git rm -r --cached directory/
solo se elimina de git rastreado, pero la estructura del repositorio permanece.
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
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
.
Puedes probar esto:
git rm -rf <directory_name>
Obligará a eliminar el directorio.
Si elimina los archivos en el directorio (con lo git rm
que 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 man
pá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.
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.
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.
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 >
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.
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.
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 .keep
archivo oculto para que Git lo note con este nuevo cambio.
touch /YOUR-directory/.keep
Ahora, si golpeas a git status
Git , 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.
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