Qu'est-ce que Git Bash pour Windows?

61

J'utilise avec bonheur Git et Git Bash à partir de https://git-scm.com/ . Il y a une page avec plus d'informations ici: https://git-for-windows.github.io/ .

Hier, j'ai eu 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 des articles sur Cygwin et sur un autre élément appelé mysys2 , qui semble être lié à mysysGit, et j'ai vu des références à MinGW. Mais ensuite, j'ai vu dans la FAQ que Mintty était 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 objets (listés ci-dessus pour la plupart) qui sont disponibles indépendamment.

Fondamentalement, j'aimerais savoir quelle est la base des commandes * nix telles que ssh scp cat lsfonctionner dans Git Bash pour Windows?

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

geneorama
la source
Vous avez trouvé une très bonne réponse ici: quelle est la signification exacte de Git Bash?
geneorama
1
Je pense que le nom officiel / la chose à google est "git bash". Aide à le mettre entre guillemets puisque les deux mots ont un sens indépendamment.
geneorama
De bonnes discussions sur Reddit ici et ici (à partir de 2017). Ils répondent même à ma rsyncquestion initiale !!
geneorama

Réponses:

72

Sommaire

Vous avez raison, Git Bash pour Windows n'est pas uniquement bashcompilé pour Windows. Il paquet de contenant bash(qui est un shell en ligne de commande ) et une collection d'autres, des utilitaires distincts * nix comme ssh, scp, cat, findet d' autres (que vous exécutez à l' aide du shell), compilé pour Windows et un nouveau terminal d'interface de ligne de commande fenêtre appelée mintty.

En un mot

Sous Windows, vous pouvez exécuter des commandes telles que ipconfig /allou en format G:utilisant cmd.exe. Ces commandes sont des fichiers exécutables sous C:\Windows\system32, stockés en tant que ipconfig.exeet format.comfichiers. cmd.exeest séparé des deux et les charge et les exécute à la demande de l'utilisateur.

ssh, scp, cat, findSont exécutés en utilisant bashexactement de la même manière. Ils sont généralement stockés sous des systèmes * nix /usr/binplutôt que C:\Windows\system32sur des systèmes, car Windows et * nix ont une structure de fichiers système organisée différemment.

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

Tout comme pouvoir simplement utiliser cmd.exe* nix ne vous permet pas de faire beaucoup sans les autres utilitaires du système, le simple fait de pouvoir exécuter Bash sous Windows n’est pas non plus très utile. 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 Cygwinet MSYS.

Cela ressemble à ce que fait le projet Wine , mais il convertit POSIX-> Windows plutôt que Windows-> POSIX comme le fait Wine.

menthe

minttyest incluse car cmd.exela 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, il minttys'agit d'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 cmd.exe.

Pabru
la source
1
Il s'avère que la plupart de mes questions trouvent une réponse dans la FAQ du projet: github.com/git-for-windows/git/wiki/FAQ et je peux trouver des informations plus spécifiques dans le groupe google groupes.google.com/forum/#! forum / git-pour-windows .
geneorama
@geneorama Cela ne devrait pas poser de problème d'accepter cette réponse si elle était effectivement correcte, informative et utile.
Walen
1
@geneorama Vous avez peut-être voulu remplir ce vide, mais ce n'était pas la question que vous avez posée. Votre message s'intitule "Qu'est-ce que Git Bash pour Windows?" , et la seule question présente dans son corps est "J'aimerais savoir quelle est la base sur laquelle des commandes * nix sont utilisées pour ssh scp cat lsfonctionner dans Git Bash pour Windows?" . Le message de Pabru répond assez bien aux deux questions et constitue une réponse correcte pour quiconque peut avoir la même question (comme indiqué), donc en l'acceptant, vous aidez les autres utilisateurs. Avez-vous essayé de poster une nouvelle question pour le rsyncproblème?
Walen
4
@walen poster des questions sur SO et sur des sites apparentés est tellement désagréable que je doute de pouvoir poster d'autres questions. Ce test était en fait un test et a confirmé mes sentiments. Dans mes efforts pour garder la question concise et documenter mes recherches (et j'ai passé une journée entière à effectuer des recherches), je suppose que j'ai laissé de côté la question. Quand je modifie avec soin, les gens semblent prendre la brièveté comme un manque de recherche. Si la question est trop verbeuse, elle est ignorée. Quoi qu'il en soit, la question est critiquée (plusieurs commentaires carrément grossiers ont été supprimés). Même mes "fameuses" questions ont été fortement critiquées au début.
geneorama
1
@ geneorama Si cela peut vous consoler, votre question m'a aidé à en apprendre davantage sur git bash, avant même de lire la réponse. Mais je comprends ce que tu veux dire.
walen
4

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é fortement 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 fichier README ( https://github.com/msysgit/msysgit ) du projet msysgit explique la relation entre les composants:

La relation entre msysGit et Git pour Windows

Git pour Windows est le progiciel 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 package logiciel qui installe l' environnement de construction permettant de créer Git pour Windows. Le moyen le plus simple est de l'installer via l' installateur net .

La différence entre MSYS et MinGW

L' objectif du projet MinGW est de fournir un moyen de compiler des fichiers 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’ fork()appel sous Windows). Par conséquent, MSYS (le système minimal ) est intégré , 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 fichier README complet serait supprimé, je l'ai copié dans un résumé .

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 se compose de trois sous - systèmes et leurs dépôts de paquets correspondants msys2, mingw32et mingw64.

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

geneorama
la source
1
"En conséquence, MSys est livré avec une couche POSIX ( basée sur une ancienne version de Cygwin ) ...", ce qui m'a permis de conclure que l'installation de git sur Cygwin rend Redact 'Git Bash for Windows' afin que je puisse simplement le désinstaller.
Daniel Sokolowski le