Tengo mi repositorio @ github. Trabajé en casa y lo empujé a github. Implicó la eliminación de archivos y directorios. Ahora estoy en mi caja de trabajo, que tenía una copia del código antes de eliminar los archivos y directorios.
Emití lo siguiente:
git remote update
git checkout HEAD
git pull origin HEAD
Eliminó todos los archivos que debería tener, pero no los directorios en los que estaban los archivos.
Dos preguntas:
- ¿Por qué no eliminó los directorios?
- ¿Hay un comando git que pueda emitir en el estado actual para eliminarlos?
Respuestas:
Git no realiza un seguimiento de los directorios, por lo que no eliminará los que queden vacíos como resultado de una fusión u otro cambio. Sin embargo, se puede utilizar
git clean -fd
para eliminar los directorios sin seguimiento (los-fd
medios bandera f eliminación orce de archivos sin seguimiento y d irectories).fuente
git clean
lo hará, por supuesto.-n
(ejecución en seco) en lugar de-f
primero, para que pueda ver qué se va a eliminar. Especialmente porquegit clean -d
elimina no solo esos directorios preocupantes, sino también los archivos sin seguimiento.git clean
no elimina los archivos enumerados en .gitignore a menos que pase la-x
opción.Como parte de la mayoría de las operaciones que alteran el árbol de trabajo (extracción, fusión, verificación, etc.), git eliminará cualquier directorio que quede vacío por esa operación (es decir, git eliminó el último archivo).
git no eliminará ningún directorio que no esté completamente vacío, por lo que si ha ocultado o ignorado archivos, el hecho de que git elimine el último archivo rastreado de ese directorio no significa necesariamente que git podrá eliminar ese directorio. git no considera que esto sea una condición de error, por lo que no se quejará de ello.
fuente
git checkout master
" pero la mayoría de la gente simplemente diría "Cambié a / revisé maestro". De todos modos, cuando git dijo 'Ya actualizado'. significa que no hizo nada. git solo eliminará los directorios que deje vacíos.git checkout
no eliminó un directorio completamente vacío.Git no rastrea directorios, archivos (con su ruta). Git crea todos los directorios para esas rutas si aún no existen (¡genial!), Sin embargo, no los elimina si todos los archivos contenidos en una ruta se mueven o eliminan (no es genial ☹ ... pero hay razones).
Solución (una vez que haya extraído / adelantado / fusionado):
Si no lo hace
stash
antesclean
, perderá todos sus archivos sin seguimiento (irreversiblemente).Nota: dado que esto también limpia todos los archivos ignorados, es posible que deba ejecutar algunos de sus scripts de compilación nuevamente para recrear los metadatos del proyecto (por ejemplo:)
./gradlew eclipse
. Esto también elimina los directorios que están vacíos y que nunca fueron parte de las rutas de los archivos git.fuente
Tuve el mismo problema, en mi caso en el servicio de compilación (CI) ... ya que GIT extrae todos los archivos sin limpiar las carpetas, todos los bin / obj que fueron compilados previamente por CI están sucios, por lo que si elimino un proyecto de prueba, el bin todavía contendrá la DLL y mencionará pruebas que no existen.
Para solucionar este problema; este comando parece hacer el truco (al menos para mí)
donde X eliminará todos los archivos sin seguimiento:
fuente
Git no rastrea directorios actualmente (ver git wiki ),
es decir, no puedes agregar directorios vacíos ni eliminará directorios que terminen vacíos.(EDITAR: ¡ Gracias, Manni, estaba equivocado! No se pueden agregar directorios vacíos, pero git eliminará los directorios que queden vacíos porque se eliminó su contenido rastreado ) .En cuanto al comando para eliminar los directorios vacíos: eso depende de su sistema operativo.
Para Linux puede usar, por ejemplo,
Sin embargo, esto eliminará todos los directorios vacíos.
fuente