web-dev-qa-db-fra.com

Qu'est-ce que Git Bash pour Windows?

J'ai utilisé avec plaisir Git et Git Bash de https://git-scm.com/ . Il y a une page avec plus d'informations ici: https://git-for-windows.github.io/ .

Hier, j'ai rencontré un problème avec rsync et j'ai commencé à creuser plus profondément dans Git Bash pour Windows. J'ai réalisé que je ne suis même pas sûr du nom du programme Bash, car il est uniquement fourni avec le téléchargement de git-scm. Je l'appelle Git Bash pour Windows, ce qui semble raisonnable.

En cherchant "Qu'est-ce que Git Bash", j'ai lu à propos de Cygwin et un différent chose appelée mysys2 , qui semble être liée à mysysGit, et j'ai vu des références à MinGW. Mais j’ai vu dans la FAQ que mintty est le terminal par défaut de Git Bash.

Il semble que l’application Bash soit en réalité un ensemble spécialement organisé d’autres éléments (listés ci-dessus pour la plupart) qui sont disponibles indépendamment.

Fondamentalement, j'aimerais savoir quelle est la base sur laquelle les commandes * nix telles que sshscpcatls fonctionnent dans Git Bash pour Windows?

(Je pense qu'une bonne réponse aiderait quelqu'un à comprendre, en gros, comment ces composants s'emboîtent et à comprendre les mots appropriés, mais je ne veux pas casser le format de question/réponse SO. )

54
geneorama

Résumé

Vous avez raison, Git Bash pour Windows n’est pas seulement bash compilé pour Windows. C'est un paquet qui contient bash (qui est un shell de ligne de commande ) et une collection d'autres utilitaires * nix distincts tels que ssh, scp, cat, find et d'autres (que vous exécutez à l'aide de la commande Shell), compilé pour Windows, et une nouvelle fenêtre de terminal d’interface de ligne de commande appelée mintty.

En un mot

Sous Windows, vous pouvez exécuter des commandes telles que ipconfig /all ou format G: à l'aide de cmd.exe. Ces commandes sont des fichiers exécutables sous C:\Windows\system32, stockés sous forme de fichiers ipconfig.exe et format.com. cmd.exe est séparé des deux et les charge et les exécute à la demande de l'utilisateur.

ssh, scp, cat, find sont exécutés en utilisant bash exactement de la même manière. Ils sont généralement stockés sous /usr/bin plutôt que dans C:\Windows\system32 sur les systèmes * nix, car Windows et * nix ont une structure de fichiers système différente.

Dans le cas de Git Bash pour Windows, ces programmes sont situés dans le dossier d’installation de Git: C:\Program Files\Git\usr\bin, qui se trouve également dans l’environnement Linux émulé sous /usr/bin.

Tout comme pouvoir seulement exécuter cmd.exe sur * nix ne vous permet pas de faire beaucoup sans les autres utilitaires système, il n'est pas non plus très utile de pouvoir exécuter Bash sous Windows. Cela signifie que toutes ces commandes supplémentaires doivent être associées à Bash pour créer un progiciel utilisable.

Détails: applications POSIX sous Windows

Normalement, ces commandes supplémentaires se trouvent sur les systèmes * nix et non sur Windows, car elles ont été programmées sur l'API de programmation POSIX (utilisée par * nix) et non sur les API Win32 (utilisée par Windows). La documentation de l'API POSIX est disponible en accès libre. Certaines personnes l'ont donc transférée sur d'autres systèmes, notamment Windows. Les implémentations Windows des API/bibliothèques POSIX sont fournies par Cygwin et MSYS.

Ceci est un peu similaire à ce que le projet Wine fait, mais il convertit POSIX-> Windows plutôt que Windows-> POSIX comme Wine le fait.

menthe

mintty est inclus car cmd.exe, la fenêtre de ligne de commande Windows par défaut, manque certaines fonctionnalités importantes, normalement disponibles sur la plupart des systèmes * nix. Dans la plupart des cas, mintty est un meilleur choix pour l'exécution de commandes (certainement pour les utilitaires fournis avec le package Git Bash pour Windows), mais il peut arriver qu'une application système Windows fonctionne mieux avec cmd.exe.

64
Pabru

Contexte

Je suis l'OP. Au départ, je voulais juste connaître le nom officiel de cette chose que j'utilisais.

Maintenant, je pense que le nom est "Git Bash for Windows". Malheureusement, la réponse est compliquée car il s’agit de beaucoup de choses.

La première réponse de 2016 ne m'a pas été utile à l'origine, mais elle a été lourdement modifiée et de plus en plus utile. Néanmoins, il manque une partie de ma question initiale.

Le début: msysgit

En fait, le début est probablement MSYS, mais vraiment MSYS2. Le terme "msysgit" est un bon terme pour effectuer une recherche afin de déterminer ce qui se passe lorsque XYZ tourne mal; des choses comme "où dans le @ * #! Tous les paramètres autocrlf sont-ils stockés?!?!?!?"

Le README ( https://github.com/msysgit/msysgit ) du projet msysgit explique la relation entre les composants:

La relation entre msysGit et Git pour Windows

Git for Windows est le package logiciel qui installe un environnement minimal pour exécuter Git sous Windows. Il est livré avec un Bash (un shell de type Unix), un interpréteur Perl et l'exécutable Git et ses dépendances.

D'autre part, msysGit est le progiciel installant le environnement de construction pouvant générer Git pour Windows. Le moyen le plus simple est de l'installer via le net installer .

La différence entre MSYS et MinGW

Le but de projet MinGW est de fournir un moyen de compiler des binaires Windows natifs sans couche POSIX à l'aide du compilateur GNU C.

Cependant, au moins, le Bash nécessite une couche POSIX (notamment en raison de l’absence de l’appel fork() sous Windows). Par conséquent, MSYS (le système minimal ) est ajouté, offrant le système minimal nécessaire pour offrir la fonctionnalité Bash (et Perl) sous Windows.

Par conséquent, MSYS est livré avec une couche POSIX (basée sur une ancienne version de Cygwin) qui n’est utilisée que par Bash et Perl, mais pas par quoi que ce soit compilé dans cet environnement.

BTW, juste au cas où le README complet serait supprimé, je l'ai copié dans un Gist _.

La fenêtre du terminal: mintty

L’autre partie de Git Bash pour Windows est la ligne de commande Windows actuelle, menthe. Dieu merci, il existe, mais ce n'est pas quelque chose dont j'ai besoin de google.

Références pour MSYS2

Leur wiki est un véritable trésor de détails sur l'environnement MSYS2: https://github.com/msys2/msys2/wiki

Dans l'introduction, cette partie est la plus pertinente pour ma question initiale:

MSYS2 est composé de trois sous-systèmes et de leurs référentiels de packages correspondants, msys2, mingw32 et mingw64.

Cette discussion est également très utile: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e }

4
geneorama