your working untracked please files everything clean cache before git git-clean

working - ¿Git checkout/pull no elimina directorios?



git rm (4)

Tengo mi repo @ github. Hice un poco de trabajo en casa y lo empujé a github. Implicaba algunas eliminaciones de archivos y directorios. Ahora estoy en mi buzón 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

Borró todos los archivos que debería tener, pero no los directorios en los que se encontraban los archivos.

Dos preguntas:

  1. ¿Por qué no eliminó los directorios?
  2. ¿Existe un comando git que pueda emitir en el estado actual para eliminarlos?

Como parte de la mayoría de las operaciones que alteran el árbol de trabajo (extracción, fusión, salida, etc.), git eliminará todos los directorios que se vuelvan vacíos 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 tiene archivos ocultos o ignorados, el hecho de que git elimine el último archivo rastreado de ese directorio no significa necesariamente que git pueda eliminar ese directorio. git no considera que esto sea una condición de error, por lo que no se quejará de ello.


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 ha sacado / reenviado / fusionado rápidamente):

git stash --include-untracked git clean -fd git stash pop

Si no stash antes de clean , perderá todos sus archivos sin seguimiento (irreversiblemente).

Nota: como esto también limpia todos los archivos ignorados, es posible que deba ejecutar algunas de sus secuencias de comandos de compilación nuevamente para recrear los metadatos del proyecto (ej .: ./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.


Git no rastrea los directorios actualmente (vea la wiki de git ), es decir, usted no puede agregar directorios vacíos ni eliminará los directorios que terminan vacíos. (EDITAR: Gracias, Manni, ¡estaba equivocado! No se pueden agregar directorios vacíos, pero git eliminará los directorios que se vuelvan 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, podrías usar, por ejemplo,

find -depth -type d -empty -exec rmdir {} /;

Sin embargo, esto eliminará todos los directorios vacíos!


Git no rastrea los directorios, por lo que no eliminará los que se vacíen como resultado de una combinación u otro cambio. Sin embargo, puede usar git clean -fd para eliminar directorios no -fd (el indicador -fd significa eliminar completamente los archivos y directorios no rastreados).