¿Qué es Git Bash para Windows de todos modos?

61

Felizmente he estado usando Git y Git Bash de https://git-scm.com/ . Hay una página con más información aquí: https://git-for-windows.github.io/ .

Ayer me encontré con un problema rsyncy comencé a profundizar en Git Bash para Windows. Me di cuenta de que ni siquiera estoy seguro del nombre del programa Bash, porque solo está incluido con la descarga de git-scm. Lo llamo Git Bash para Windows, lo que parece razonable.

Al analizar "¿Qué es Git Bash", leí sobre Cygwin y una cosa diferente llamada mysys2 , que parece estar relacionada mysysGit, y vi referencias a ella MinGW. Pero, luego vi en las preguntas frecuentes que mintty es el terminal predeterminado para Git Bash.

Parece que la aplicación Bash es en realidad un paquete especialmente curado de otras cosas (en su mayoría enumeradas anteriormente) que están disponibles de forma independiente.

Básicamente, me gustaría saber cuál es la base que hace que los comandos * nix ssh scp cat lsfuncionen en Git Bash para Windows.

(Creo que una buena respuesta ayudaría a alguien a comprender, a grandes rasgos, cómo encajan estos componentes y a comprender las palabras correctas para los componentes, pero no quiero romper el formato de preguntas / respuestas SO).

geneorama
fuente
Encontré una muy buena respuesta aquí: ¿Cuál es el significado exacto de Git Bash?
geneorama
1
Creo que el nombre / cosa oficial de google es "git bash". Ayuda a tenerlo entre comillas ya que ambas palabras son significativas independientemente.
geneorama
Una buena discusión sobre Reddit aquí y aquí (desde 2017). ¡Incluso abordan mi rsyncpregunta original !
geneorama

Respuestas:

72

Resumen

Tienes razón, Git Bash para Windows no solo se bashcompila para Windows. Es paquete que contiene bash(que es un shell de línea de comandos ) y una colección de otros, servicios públicos separados * nix como ssh, scp, cat, findy otros (el que se ejecuta utilizando la cáscara), compilado para Windows, y un nuevo terminal de la interfaz de línea de comandos ventana llamada mintty.

En una palabra

En Windows puede ejecutar comandos como ipconfig /allo format G:usando cmd.exe. Estos comandos son archivos ejecutables reales C:\Windows\system32, almacenados como ipconfig.exey format.comarchivos. cmd.exeestá separado de ambos y los carga y los ejecuta a petición del usuario.

ssh, scp, cat, findSe ejecutan utilizando bashexactamente de la misma manera. Por lo general, se almacenan /usr/binen los C:\Windows\system32sistemas * nix en lugar de en ellos , porque Windows y * nix tienen su estructura de archivos del sistema organizada de manera diferente.

En el caso de Git Bash para Windows, estos programas se encuentran en la carpeta de instalación de Git: C:\Program Files\Git\usr\binque también se puede encontrar en el entorno Linux emulado en /usr/bin.

Al igual que poder ejecutar cmd.exeen * nix no le permite hacer mucho sin las otras utilidades del sistema, tampoco es muy útil poder ejecutar Bash en Windows. Esto significa que todos estos comandos adicionales deben combinarse con Bash para crear un paquete de software utilizable.

Detalles: aplicaciones POSIX en Windows

Normalmente, esos comandos adicionales se encontrarían en los sistemas * nix y no en Windows, porque se han programado con la API de programación POSIX (que es lo que usa * nix), y no con las API Win32 (que es lo que usa Windows). La documentación de la API POSIX está abiertamente disponible, por lo que algunas personas la han portado a otros sistemas, incluido Windows. La implementación de Windows de las API / bibliotecas POSIX son proporcionadas por Cygwiny MSYS.

Esto es algo similar a lo que hace el proyecto Wine , pero convierte POSIX-> Windows en lugar de Windows-> POSIX como Wine lo hace.

mintty

minttyse incluye porque cmd.exe, en la ventana de línea de comandos predeterminada de Windows, faltan algunas características importantes que normalmente están disponibles en la mayoría de los sistemas * nix. En la mayoría de los casos, minttyes una mejor opción para ejecutar comandos (ciertamente para las utilidades que vienen con el paquete Git Bash para Windows), pero ocasionalmente una aplicación de sistema de Windows puede funcionar mejor cmd.exe.

Pabru
fuente
1
Resulta que la mayoría de mis preguntas se responden en las preguntas frecuentes del proyecto: github.com/git-for-windows/git/wiki/FAQ y puedo encontrar información más específica en el grupo de google groups.google.com/forum/#. foro / git-para-windows .
geneorama
@geneorama Eso no debería ser un problema para aceptar esta respuesta si fuera correcta, informativa y útil.
walen
1
@geneorama Llenar ese espacio en blanco puede haber sido su intención, pero esa no fue la pregunta que hizo. Su publicación se titula "¿Qué es Git Bash para Windows de todos modos?" , y la única pregunta presente en su cuerpo es "Me gustaría saber cuál es la base que hace que los comandos * nix ssh scp cat lsfuncionen en Git Bash para Windows". . La publicación de Pabru responde ambas preguntas bastante bien y es una respuesta correcta para cualquiera que tenga la misma pregunta (como se indicó), por lo que al aceptarla, está ayudando a otros usuarios. ¿Has intentado publicar una nueva pregunta para el rsyncproblema?
walen
44
@walen publicar preguntas en SO y sitios relacionados es tan desagradable que dudo que alguna vez publique más preguntas. Esta fue en realidad una prueba, y confirmó mis sentimientos. En mi esfuerzo por mantener la pregunta concisa y documentar mi investigación (y pasé todo un día investigando), creo que omití la pregunta real. Cuando edito con cuidado, la gente parece tomar la brevedad como una falta de investigación. Si hago la pregunta demasiado detallada, se ignora. No importa qué, la pregunta es criticada (se han eliminado varios comentarios groseros). Incluso mis preguntas "famosas" fueron fuertemente rechazadas al principio.
Geneorama
1
@geneorama Si te sirve de consuelo, tu pregunta me ayudó a aprender más sobre git bash, incluso antes de leer la respuesta. Pero entiendo lo que quieres decir.
walen
4

Antecedentes

Soy el OP. Originalmente solo quería saber el nombre formal de esta cosa que estaba usando.

Ahora creo que el nombre es "Git Bash para Windows". Lamentablemente, la respuesta completa es complicada porque esto es en realidad muchas cosas.

La respuesta principal de 2016 originalmente no fue útil para mí, pero se ha editado en gran medida y se ha vuelto cada vez más útil. Aún así, se pierde parte de mi pregunta original.

El principio: msysgit

En realidad, el comienzo es probablemente MSYS, pero realmente MSYS2. El término "msysgit" es un buen término para realizar una búsqueda para descubrir qué sucede cuando XYZ sale mal; cosas como "¿dónde en el @ * #! se almacenan todas las configuraciones de autocrlf?!?!?!?"

El archivo README ( https://github.com/msysgit/msysgit ) en el proyecto msysgit explica la relación entre los componentes:

La relación entre msysGit y Git para Windows

Git para Windows es el paquete de software que instala un entorno mínimo para ejecutar Git en Windows. Viene con un Bash (un shell de tipo Unix), con un intérprete de Perl y con el ejecutable de Git y sus dependencias.

Por otro lado, msysGit es el paquete de software que instala el entorno de compilación que puede compilar Git para Windows. La forma más fácil es instalarlo a través del instalador de red .

La diferencia entre MSYS y MinGW

El objetivo del proyecto MinGW es proporcionar una forma de compilar binarios nativos de Windows sin capa POSIX utilizando el compilador C de GNU.

Sin embargo, al menos el Bash necesita una capa POSIX (especialmente debido a la ausencia de la fork()llamada en Windows). Por lo tanto, se incluye MSYS (el sistema mínimo ), que ofrece el sistema mínimo necesario para ofrecer la funcionalidad Bash (y Perl) en Windows.

En consecuencia, MSYS se entrega con una capa POSIX (basada en una versión anterior de Cygwin) que solo es utilizada por Bash y Perl, pero no por nada compilado dentro de ese entorno.

Por cierto, en caso de que se elimine el archivo README completo, lo copié en una esencia .

La ventana de terminal: mintty

La otra parte de Git Bash para Windows es la línea de comandos real de Windows, mintty. Gracias a Dios que existe, pero no es algo que necesito para googlear.

Referencias para MSYS2

Su wiki es un verdadero tesoro de detalles sobre el entorno MSYS2: https://github.com/msys2/msys2/wiki

En la introducción, esta parte es más relevante para mi pregunta original:

MSYS2 consta de tres subsistemas y sus correspondientes depósitos de paquetes, msys2, mingw32, y mingw64.

Esta discusión también es muy útil: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

geneorama
fuente
1
"En consecuencia, MSys se entrega con una capa POSIX ( basada en una versión anterior de Cygwin ) ..." - esto me ayudó a concluir que instalar git en Cygwin hace que 'Git Bash para Windows' sea redundante, así que puedo desinstalarlo.
Daniel Sokolowski