¿hay un emulador de unix "seguro" para ejecutar git en Windows?

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:

  1. el estado de git mostró un directory de trabajo limpio
  2. El logging de git mostró 3 commits A, B y C (commit C check out)
  3. El contenido del repository era una carpeta que contenía un file, 2 files más en la carpeta raíz, más la carpeta .git con contenido
  4. la list de git stash estaba vacía
  5. git branch -a reporta solo master, HEAD y origin / master

Lado del server:

  1. El origen contenía 13 carpetas adicionales, cada una con un file
  2. El origen también contiene confirmaciones A, B y C
  3. Solo la twig principal está presente

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:

  1. Creé un nuevo file y luego ejecuté "git add", "git commit" (creación de D) y "git push".
  2. Commit D apareció en el server con el nuevo file. Las 13 carpetas y files adicionales todavía estaban presentes en el server.
  3. Ejecuté "git pull" que me devolvió "ya actualizado"
  4. Comprobé los cambios para cada confirmación en el lado del cliente y en el lado del server y cada diferencia era la misma
  5. He clonado una nueva copy del repository y los contenidos coinciden con los 13 files y carpetas adicionales con el compromiso adicional D y el file adicional
  6. Luego recreé una carpeta con el mismo nombre que una de las carpetas eliminadas y ejecuté "estado de git", donde finalmente todos los files y carpetas eliminados se informaron correctamente.

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