Git bajo Windows: ¿MSYS o Cygwin?

80

Planeo migrar mis proyectos a git, y actualmente me pregunto cuál es la mejor y / o la opción más estable en Windows.

Por lo que deduzco, básicamente tengo 2.5 opciones:

  1. MSYSgit
  2. git bajo Cygwin
  3. (también conocido como 2.5) MSYSgit desde un indicador de Cygwin (dado que Cygwin git ya está instalado).

Nota: En mi opinión, Cygwin en sí mismo es una gran ventaja, ya que puede tener acceso a casi todas las herramientas de línea de comandos * nix, ya que con MSYSgit bash, solo tiene acceso a un subconjunto bastante pequeño de estas herramientas.

Dado eso, ¿qué opción sugeriría?

joce
fuente

Respuestas:

60

Editar (2 años más después: octubre de 2014)

Johannes Schindelin acaba de explicar (octubre de 2014) que msysgit está eliminado :

ahora tenemos un SDK de Git para Windows liviano , que es esencialmente un sistema MinGW / MSys estándar administrado a través del administrador de paquetes mingw-get.

Decidimos simplemente eliminar el nombre "msysGit" (así como la organización de GitHub del mismo nombre ) y trabajar en Git para Windows (con la correspondiente organización de GitHub) , y usar el nombre "Git para Windows" para el instalador destinado en "usuarios finales" y "Git para Windows SDK" para el entorno de desarrollo dirigido a Git para desarrolladores de Windows).


Editar (3 años después: abril de 2012)

MsysGit (ahora en GitHub ) es el camino a seguir si desea un inicio rápido y ligero en el mundo de Git: descomprima el archivo, inicie git-cmd.bato git-bash.baty ya está.
Sus última versión (1.7.10, abril de 2012) ahora incluye soporte para UTF-8 , también incluido en GitExtension . Sin embargo, no olvide establecer su autocrlfen falso .

Si realmente le faltan todos los demás comandos de Unix, no los paquetes con msysgit, simplemente descargue una versión de GoW (Gnu en Windows) , apropiadamente llamada "La alternativa ligera a Cygwin".
Quiero decir: 130 comandos unix s ...

Cygwin debería ser una solución de respaldo solo para ciertos casos, como la velocidad de transferencia de grandes repositorios de Git, como se menciona a continuación por incrementor en su respuesta .


Junio ​​de 2012: si desea interactuar con GitHub , ahora tiene http://windows.github.com (consulte también " Diseño de GitHub para Windows ").
No solo configurará las claves ssh por usted (y agregará la clave pública generada a su perfil de GitHub), sino que también instalará, para todas las operaciones de git, un ... MsysGit.


Respuesta original (abril de 2009)

No tengo ningún problema con la última versión de MsysGit:
uso la opción 2 , lo que significa que solo agrego el directorio git \ bin a la variable de entorno PATH, pero sin anular algunas herramientas integradas de Windows.

Logré definir herramientas externas como Notepad ++ y WinMerge (o DiffMerge)

Ejecuté con éxito scripts como Ejecuté con svn2git porque, desde MsysGit1.6.2 +, incluye el git svncomando ' '.

Y finalmente espero con ansias MsysGit1.6.2.3 para eso incluirá finalmente git filter-branchel comando ' ' ! (una versión lenta de filter-branch, pero aún así).

Para el comando de Unix, prefiero instalar un paquete coreutils de GnuWin32 y usarlos solo cuando los necesito.

Entonces, en general, no uso la capa Cygwin y logré ejecutar Git muy bien en su versión MsysGit basada en Windows.

VonC
fuente
También utilizo p4merge, que es bastante bueno. He leído que hay problemas con los nombres de archivos git y unicode.
Benjol
Gracias por vincular a la pregunta de configuración de core.editor. (Traté de usar Notepad ++ con interruptores de línea de comando como -nosession y -multiInst)
mbx
Esta respuesta realmente no responde por qué uno usaría uno sobre el otro. Hay mejores respuestas debajo de la OMI
Sebastien Martin
@SebastienMartin deberías mencionarlo al OP (Joce) en ese caso. De lo contrario, no se le notificará la mejor respuesta que debería seleccionar.
VonC
@SebastienMartin He actualizado esta respuesta anterior con información más actual.
VonC
15

Si. Pregunta antigua. Nueva respuesta:

Hemos estado usando MSYSgit durante aproximadamente 2 años en una implementación grande. La velocidad de las transferencias desde un servidor de repositorio de git local se ha limitado a menos de 5 MiB / s. Una investigación anterior sobre el problema indicó que el problema era que los desarrolladores de MSYS estaban en Windows XP y la seguridad de Windows 7 limitaba las conexiones desde el símbolo del sistema / shell bash. Este no parece ser, de hecho, el problema.

Descubrí entrada de blog de Darrell Mozingo y probado un clon de un gran (muchos GIB) Repo usando solamente un Cygwin instalar. Las velocidades de transferencia estaban en el rango de 30 MiB / s. El problema es que MSYSgit usa un binario OpenSSH antiguo de 2007.

Con este fin, hasta que eso se solucione, ahora recomiendo un cambio a Cygwin (aunque la versión de git está un poco atrasada). También encontré que Cygwin es más estable y menos probable que perl se quede sin memoria.

incremental
fuente
Parece que MinGW está usando OpenSSH 5.4 que es de 2010
Steven Penny
9

He incursionado en el uso de las versiones MSYS y Cygwin de git, y para ser realmente honesto, no encontré ninguna experiencia especialmente buena. Simplemente no creo que git esté realmente listo para Windows todavía.

Dicho esto, un problema que encontré con la versión MSYS es que convertiría los finales de línea en sus archivos (no binarios) del estilo UNIX (avance de línea) al estilo DOS (retorno de carro / avance de línea). Puede considerar esto un error o una característica, pero no hay forma de cambiar el comportamiento que pude encontrar. (EDITAR: establezca la variable de configuración core.autocrlfenfalse . Gracias Brian).

OTOH, la versión MSYS de git tiene algunas funciones de GUI que no están disponibles en la versión cygwin a menos que desee instalar y ejecutar un servidor X completo. (Gracias Joce por confirmar esto).

Mi impresión es que la versión MSYS es más popular, aunque puede deberse a que no es necesario instalar un ecosistema cygwin para usarla. (Y estoy de acuerdo, cygwin es extremadamente útil).

Personalmente, iría con Bazaar o Mercurial , cualquiera de los cuales tiene un mejor soporte para Windows IMO.

Evan
fuente
3
Bazaar también fue mi solución a la cuestión de Git en Windows. Je.
Instance Hunter
9
Puede desactivar la traducción de final de línea. Solo necesita establecer core.autocrlf en falso.
Brian Campbell
1
Actualmente estamos revisando nuestras opciones para elegir entre DCVS. Mercurial está en la lista. Sin embargo, el costo de la ramificación, especialmente para proyectos muy grandes, es bastante negativo. Cygwin dist viene con una interfaz gráfica de usuario (a costa de ejecutar un servidor X). Sin embargo, no estoy del todo seguro de cuánto valor agrega.
joce
3
Estoy usando la versión msys y no encuentro ningún problema.
Ikke
2
Creo que la última versión de msys le pide que configure cómo se manejan los finales de línea cuando lo instala.
Ken Liu
7

Tanto Cygwin como Msys Git funcionan bastante bien para casos de uso normales. Si desea utilizar scripts como git-svn, Cygwin es una mejor opción. Como viejos usuarios de Windows que finalmente se lanzaron a Linux, definitivamente puedo decir que Cygwin es una gran bendición y que vale la pena tener en sí mismo.

Sin embargo, el contexto es importante; que proyectos son estos? ¿Quiénes los utilizan? Etc.

Edward Z. Yang
fuente
2
Estamos hablando de un proyecto bastante grande (32K + archivos fuente) desarrollado por un equipo bastante pequeño (~ 10 progs). No todos dominan el entorno w / * nix, pero la simplicidad de git para el uso diario parece prometedora. También planeamos usar muchas ramificaciones, por ejemplo, One P4 changelist <=> One git branch. Solo por esa razón, git es mucho más interesante que Hg, por ejemplo. Mi temor en Cygwin vs. MSYS es que la versión de Cygwin no esté tan actualizada como la de MSYS.
joce
6

También he probado ambos mundos (CygWin y MSysgit), mi experiencia también es que hay algunas deficiencias en el bash de MSysgit. No se puede ejecutar git stash con éxito mientras Cygwin lo manejaba con gracia en el mismo repositorio de git.

Sin embargo, aún no se ha realizado un análisis profundo ...

PatrikS
fuente
4

Actualmente uso Msysgit junto con TortoiseGit.

La interfaz de usuario de MsysGit no es realmente de mi agrado, así que uso una herramienta familiar como TortoiseGit y cuando trabajo en la línea de comandos (la mayor parte del tiempo), uso el binario git de Msysgit

Tigraine
fuente
3

Recomendaría msysgit. Especialmente si se usa con extensiones de Git : proporciona una manera fácil de configurar el entorno: editor / diff / merge tools, y permite realizar operaciones avanzadas de git desde la interfaz de usuario.

Konstantin Tenzin
fuente
1

Me he encontrado con errores graves en la implementación de cygwin de MSys: algunos comandos, especialmente el rebase, eran bastante propensos a fallar. Cygwin's fue mucho más estable para mí.

Dicho esto, fue hace un mes, podría haber mejorado desde entonces.

Alex Gontmakher
fuente
3
¿"Cygwin de MSys"? ¿no te refieres al Git de MSys?
joce
2
@Alex Gontmakher Quizás sea más estable pero también es lento hasta la muerte. Vea esta publicación: stackoverflow.com/questions/6724471/…
WinWin
1

He usado Cygwin Git y Msysgit con Windows. Sugeriría usar Cygwin + Git. Cygwin 1.7 (actualmente en versión beta) aborda un matiz importante (al menos para mí) al usar git gui y gitk. Las versiones anteriores de Cygwin solían abrir decenas de ventanas cmd cada vez que hago algo en git-gui o gitk. Esto se ha abordado en 1.7. El poderoso shell de Cygwin también trae muchas de las ventajas de la terminal de Linux.

Dicho esto, Msysgit ha evolucionado bastante y es realmente útil en Windows. Sin embargo, enfrenté un par de problemas.

Problema de permiso: algunos archivos creados de forma nativa en Windows tenían el modo 755 que se convirtió a 644 mientras usaba Msysgit. Esto se mostraría como archivos modificados. Un registro debería solucionar este problema.

CRLF: el escurridizo CRLF, como de costumbre, crea problemas en Windows. Msysgit puede informar archivos modificados. Esto se puede solucionar seleccionando "Dejar los finales de línea sin cambios" (olvidé el texto exacto) al instalar Msysgit.

Daemon: Y sí, todavía me resulta difícil configurar git daemon en Msysgit.

sankara
fuente
1

Nueva respuesta a una vieja pregunta ...

Estoy usando git 1.7.3 desde un shell cmd de Windows 7 y funciona muy bien. Utilizo una combinación de línea de comando git y git gui, y ambos han funcionado bien durante meses. Tuvimos problemas de retorno de carro / avance de línea, exacerbados cuando agregamos desarrolladores de Mac al equipo, pero estos se resolvieron con ...

core.autocrlf=true
core.safecrlf=false

No digo que no debas usar un shell * nix-y, solo que no es necesario.

yoyó
fuente
0

Tengo reservas hacia CygWin porque solo quiero git y no ninguna de las otras herramientas que Cygwin quiere introducir. Normalmente, quieres que tu computadora con Windows funcione como una computadora con Windows y CygWin quiere usar algo completamente diferente. Darle una palmada a la funcionalidad * nix solo por diversión no es para desaparecer.

La cuestión es que, si alguna vez quiero trabajar con * nix como la línea de comandos, iría a mi máquina Linux y trabajaría en esa computadora. Computadoras virtuales y escritorios remotos funcionan como un encanto hoy en día y son lo suficientemente accesibles para los desarrolladores.

Realmente debe haber una razón legítima para que utilice CygWin. Si es solo para usar git, le sugiero que use MSysGit que es mi preferencia. Funciona muy bien con las herramientas gitk y git-gui que se incluyen. He estado trabajando tanto en Eclipse como en Visual Studio usando msysgit y funciona como un encanto.

Lo único que estoy esperando ahora es un clon de Tortuga completamente funcional para git .

Spoike
fuente
Y parece que al menos a partir del 13/03/17 Cygwin está en 2.8.3 git y tuve algunos problemas con Perl al actualizar. Git Bash MinGW está en 2.12.
Mark
0

Hay un escenario en Windows en el que simplemente tiene que usar Git a través de Cygwin: aquí es cuando desea usar Git contra un servidor SVN, que espera versiones de cliente SVN superiores a 1.5. Existen ganchos de confirmación previa de SVN que bloquean las confirmaciones cuando no hay un argumento 'mergeinfo', y el argumento 'mergeinfo' es predeterminado en SVN solo desde la versión 1.5. El problema con msysGit es que está construido contra una versión anterior de SVN (1.4.6), por lo que no puede confirmar con éxito en este caso. Pero es posible con Cygwin's Git, ya que está construido contra versiones más nuevas de SVN.

OVNI
fuente
0

Si solo desea realizar acciones simples como empujar / tirar / ramificar, puede probar SourceTree de Atlasian. Una interfaz de usuario muy simple y clara para el comando Git. Sin embargo, tiene deficiencias.

Si necesita usar la herramienta git de línea de comandos, simplemente obtenga la herramienta Git para Windows. Debería ser suficiente, a menos que empiece a buscar en bash scripting.

Thoroc
fuente