97 votes

Qu'est-ce que Git Bash pour Windows ?

Je suis heureux d'utiliser Git et Git Bash depuis 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. Je me suis rendu compte que je ne suis même pas sûr du nom du programme Bash, car il est simplement fourni avec le téléchargement de git-scm. Je l'appelle Git Bash pour Windows, ce qui semble raisonnable.

En cherchant à savoir "Qu'est-ce que Git Bash", j'ai lu ce qui suit Cygwin et un différents chose appelée msys2 qui semble être lié à msysGit et j'ai vu des références à MinGW . Mais, ensuite, j'ai vu dans la FAQ que mintty est le terminal par défaut pour Git Bash.

Il semble que l'application Bash soit en fait un ensemble spécialement conçu pour d'autres éléments (pour la plupart énumérés ci-dessus) qui sont disponibles indépendamment.

Fondamentalement, j'aimerais savoir quelle est la base qui fait que des commandes *nix comme ssh , scp , cat y ls fonctionne dans Git Bash pour Windows ?

(Je pense qu'une bonne réponse aiderait quelqu'un à comprendre, dans les grandes lignes, comment ces composants s'assemblent et à comprendre les bons mots pour les composants, mais je ne veux pas briser le format question/réponse de l'OS).

104voto

Ivo Points 11

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 ligne de commande Shell ) et une collection d'autres utilitaires *nix séparés comme ssh , scp , cat , find et d'autres (que vous exécutez à l'aide du Shell), compilé pour Windows, et une nouvelle fenêtre de terminal à interface de ligne de commande appelée mintty .

En bref

Sous Windows, vous pouvez exécuter des commandes comme ipconfig /all o format G: en utilisant cmd.exe . Ces commandes sont de véritables fichiers exécutables sous C:\Windows\system32 stocké sous la forme ipconfig.exe y format.com des fichiers. 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 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 la structure des fichiers système de Windows et de *nix est organisée différemment.

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 peut également être trouvé dans l'environnement Linux émulé sous /usr/bin .

Juste comme être capable de juste courir cmd.exe sur *nix ne vous permet pas de faire grand-chose sans les autres utilitaires du système, le simple fait de pouvoir exécuter Bash sur Windows n'est pas très utile non plus. Cela signifie que toutes ces commandes supplémentaires doivent être regroupées avec Bash pour créer un logiciel utilisable.

Détails : Applications POSIX sous Windows

Normalement, ces commandes supplémentaires se trouvent sur les systèmes *nix et non sur Windows, parce qu'elles ont été programmées avec l'API de programmation POSIX (qui est celle utilisée par *nix), et non avec les API Win32 (qui sont celles utilisées par Windows). La documentation de l'API POSIX est ouvertement disponible, de sorte que certaines personnes l'ont portée sur d'autres systèmes, y compris Windows. L'implémentation Windows des API/librairies POSIX est fournie par Cygwin y MSYS .

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

mintty

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

11voto

geneorama Points 1338

Contexte

Je suis l'OP. A l'origine, je voulais juste connaître le nom officiel de cette chose que j'utilisais.

Maintenant je pense que le nom est "Git Bash pour Windows". Malheureusement, la réponse complète est compliquée car cette chose est en fait beaucoup de choses.

La meilleure réponse de 2016 n'était à l'origine pas utile pour moi, mais elle a été fortement modifiée et est devenue de plus en plus utile. Pourtant, elle passe à côté d'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 à mettre dans une recherche pour comprendre ce qui se passe lorsque XYZ se passe mal ; des choses comme "où dans le @*# ! sont stockés tous les paramètres autocrlf ?!?!?".

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

La relation entre msysGit y Git pour Windows

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

D'un autre côté, msysGit est le logiciel qui installe le construire l'environnement qui peut construire Git pour Windows. Le moyen le plus simple est de l'installer via le fichier installateur net .

La différence entre MSYS et MinGW

El Projet MinGW L'objectif de GNU C est de fournir un moyen de compiler des binaires Windows natifs sans couche POSIX en utilisant le compilateur C de GNU.

Cependant, au moins le Bash a besoin d'une couche POSIX (notamment en raison de l'absence de l'élément fork() sous Windows). Par conséquent, MSYS (le système minimal ) est intégré, offrant le système minimal nécessaire pour offrir les fonctionnalités de 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 ce qui est compilé dans cet environnement.

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

La fenêtre du terminal : mintty

L'autre partie de Git Bash pour Windows est la véritable ligne de commande Windows, mintty. Dieu merci, elle existe, mais ce n'est pas quelque chose que j'ai besoin de googler.

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 de leurs dépôts de paquets correspondants, msys2 , mingw32 y mingw64 .

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X