Estoy trabajando en una gran empresa corporativa donde todas las máquinas de desarrollo son Windows 7 Enterprise SP1.
Estoy ejecutando un importante proyecto de migration de RTC a git (lo que da como resultado 1200 git repos). No hay serveres de Windows en entornos de producción, entornos de compilation o testing: todo es Solaris o RedHat. La solución se extenderá a ~ 200 desarrolladores.
En general, existe un impulso para utilizar más herramientas de command-line de Unix y hay algunas alternativas diferentes en Windows, tales como: Cygwin, git-bash, cmder. He evitado ejecutar una máquina virtual completa de Linux porque eso presenta demasiados problemas (la mayoría de los desarrolladores no tienen derechos de administrador local y el proxy de Internet es una molestia constante, así que no quiero que la networking sea un problema mayor con NAT).
He estado ejecutando Cygwin (mintty 2.6.2) durante los últimos 8 meses y hasta el día de hoy ha estado bien, cuando llegué a un problema muy preocupante con git (v2.8.3), donde el estado de git reportó un directory de trabajo limpio incluso a través de múltiples files y las carpetas se habían eliminado en el repository. Solo después de recrear una carpeta con el mismo nombre que una de las carpetas eliminadas, todos los files eliminados aparecen correctamente con el estado de git.
Explicaré los síntomas y lo que estaba haciendo, pero hasta ahora no he reproducido el problema. Mi sospecha es que el problema se encuentra en algún lugar entre el sistema de files emulado de Linux y el sistema de files de Windows real. ¿Hay alguna diferencia en la forma en que los diversos emuladores logran esto?
El problema específico que golpeé tenía estos síntomas:
Lado del cliente:
Lado del server:
Commit A fue el compromiso vacío inicial. Commit B fue donde se agregaron todos los contenidos, 14 carpetas y 16 files. Commit C fue otro compromiso vacío
Commit A y Commit C se crearon utilizando herramientas para ayudar con la migration. Ejecuta dos commands: "git init" y "git commit –allow-empty -m 'initial commmit'"
No podía entender cómo el estado de git no informaba los files eliminados (recuerdo haberlos borrado, pero algunos días antes había varios hibernadores en la computadora, y probablemente uno o dos reinicios después de reanudar mi trabajo)
Tratando de descubrir lo que sucedió, hice esto:
No puedo explicar esto de ninguna otra forma, excepto por un error grave que simplemente hace inseguro usar git en Cygwin. Espero que la comunidad tenga algún consejo para mí en esta área y que esto se formule como una pregunta suficientemente clara de que los mods no marcan mi publicación.
Haré todo lo posible para tratar de reproducir el problema y actualizar el problema con más información cuando tenga alguno.
Editar: Actualización 2016-12-08
Mis bashs de reproducir el error no han tenido éxito. Si lo vuelvo a ver durante mi trabajo, actualizaré este problema.
Nunca he visto ese comportamiento con Git en Cygwin. En realidad actualmente uso Git para Windows desde dentro de Cygwin y también funciona bien. Solía usar el Cygwin Git, pero tenía la sensación de que es más lento que Git para Windows, así que cambié a Git para Windows utilizado desde dentro de Cygwin y funciona muy bien.
Si en algún momento actualiza los cuadros de Windows a Windows 10, también puede considerar otra opción, el Subsistema de Windows para Linux, que es un entorno Linux virutal basado en Ubuntu desarrollado por MS junto con Canonical. Todavía está en process de maduración y aún no se puede usar por completo, en mi opinión, pero ahí tienes un entorno virtual virutal compatible con Linux donde puedes usar apt-get
y así sucesivamente.
El problema que mencionas es realmente inesperado, y dudo que Cygwin pueda causarlo. Pero tienes las siguientes opciones
git viene con git bash, que soporta todos los principales commands de Unix y se ve completamente como unix shell. Estoy usando la versión 2.9 de git en Windows 10 y uso mucho los commands principales de Unix como grep, sed y find, y todos funcionan de manera excelente. Incluso es compatible con vi pero no lo uso
git viene con git CMD, y los mismos commands git funcionarán en el indicador de commands de Windows como lo hacen en Unix. No deberías necesitar un emulador separado con esto.
Aunque mencionas que estás usando Windows 7, pero ahora Windows 10 viene con soporte nativo para Unix Bash
Puedes usar gnuwin32 pero dudo que sea mejor que Cygwin