Che cos'è comunque Git Bash per Windows?


61

Ho usato felicemente Git e Git Bash da https://git-scm.com/ . C'è una pagina con maggiori informazioni qui: https://git-for-windows.github.io/ .

Ieri ho riscontrato un problema rsynce ho iniziato a scavare più a fondo in Git Bash per Windows. Mi sono reso conto che non sono nemmeno sicuro del nome del programma Bash, perché è in bundle con il download di git-scm. Lo sto chiamando Git Bash per Windows, il che sembra ragionevole.

Guardando "What is Git Bash" ho letto di Cygwin e una cosa diversa chiamata mysys2 , che sembra essere correlata mysysGit, e ho visto riferimenti a MinGW. Ma poi ho visto nelle FAQ che mintty è il terminale predefinito per Git Bash.

Sembra che l'applicazione Bash sia in realtà un pacchetto appositamente curato di altre cose (per lo più elencate sopra) che sono disponibili in modo indipendente.

Fondamentalmente, vorrei sapere qual è la base che fa funzionare i comandi * nix ssh scp cat lsin Git Bash per Windows?

(Penso che una buona risposta aiuterebbe qualcuno a capire, a grandi linee, come questi componenti si incastrano e capiscono le parole giuste per i componenti, ma non voglio spezzare il formato domanda / risposta SO.)



1
Penso che il nome / cosa ufficiale di Google sia "git bash". Aiuta ad averlo tra virgolette poiché entrambe le parole sono significative in modo indipendente.
geneorama,

Qualche buona discussione su Reddit qui e qui (dal 2017). Rispondono persino alla mia rsyncdomanda originale !!
geneorama,

Risposte:


72

Sommario

Hai ragione, Git Bash per Windows non è solo bashcompilato per Windows. E 'pacchetto che contiene bash(che è una shell a linea di comando ) e una collezione di altri, utility separate * nix come ssh, scp, cat, finde altri (che si esegue utilizzando la shell), compilato per Windows, e un nuovo terminale di interfaccia della riga di comando finestra chiamata mintty.

In poche parole

Su Windows potresti eseguire comandi come ipconfig /allo format G:utilizzando cmd.exe. Questi comandi sono file eseguibili effettivi in C:\Windows\system32, memorizzati come ipconfig.exee format.comfile. cmd.exeè separato da entrambi e li carica e li esegue su richiesta dell'utente.

ssh, scp, cat, findVengono eseguiti utilizzando bashesattamente nello stesso modo. Di solito sono memorizzati /usr/bininvece che C:\Windows\system32su sistemi * nix, perché Windows e * nix hanno la struttura dei file di sistema organizzata in modo diverso.

Nel caso di Git Bash per Windows, questi programmi si trovano nella cartella di installazione di Git: C:\Program Files\Git\usr\binche si trova anche nell'ambiente emulato di Linux in /usr/bin.

Proprio come essere in grado di eseguire solo cmd.exe* nix non ti consente di fare molto senza le altre utilità di sistema, anche solo essere in grado di eseguire Bash su Windows non è molto utile. Ciò significa che tutti questi comandi extra devono essere raggruppati insieme a Bash per creare un pacchetto software utilizzabile.

Dettagli: applicazioni POSIX su Windows

Normalmente quei comandi extra si trovano sui sistemi * nix e non su Windows, perché sono stati programmati contro l'API di programmazione POSIX (che è ciò che * usa *) e non le API Win32 (che è quello che usa Windows). La documentazione API POSIX è apertamente disponibile, quindi alcune persone l'hanno portata su altri sistemi, incluso Windows. L'implementazione Windows delle API / librerie POSIX è fornita da Cygwine MSYS.

Questo è un po 'simile a quello che fa il progetto Wine , ma converte POSIX-> Windows anziché Windows-> POSIX come fa Wine.

mintty

minttyè incluso perché cmd.exe, nella finestra predefinita della riga di comando di Windows, mancano alcune importanti funzionalità che sono normalmente disponibili sulla maggior parte dei sistemi * nix. Nella maggior parte dei casi, minttyè una scelta migliore per l'esecuzione dei comandi (sicuramente per le utilità fornite con il pacchetto Git Bash per Windows), ma a volte un'applicazione di sistema Windows può funzionare meglio con cmd.exe.


1
Risulta che la maggior parte delle mie domande trovano risposta nelle FAQ del progetto: github.com/git-for-windows/git/wiki/FAQ e posso trovare informazioni più specifiche nei gruppi di google group.google.com/forum/#! forum / git-per-windows .
geneorama

@geneorama Non dovrebbe essere un problema accettare questa risposta se fosse effettivamente corretta, istruttiva e utile.
Walen,

1
@geneorama Riempire quel vuoto potrebbe essere stata la tua intenzione, ma non era questa la domanda che hai fatto. Il tuo post si intitola "Cos'è Git Bash per Windows?" e l'unica domanda presente nel suo corpo è "Vorrei sapere qual è la base che rende i comandi * nix come ssh scp cat lsfunzionano in Git Bash per Windows?" . Il post di Pabru risponde a entrambe le domande abbastanza bene ed è una risposta corretta per chiunque possa avere la stessa domanda (come indicato), quindi accettandolo aiuti gli altri utenti. Hai provato a pubblicare una nuova domanda per il rsyncproblema?
Walen,

4
@walen pubblicare domande su SO e siti correlati è così spiacevole che dubito che pubblicherò mai più domande. Questa è stata in realtà una prova e ha confermato i miei sentimenti. Nel mio sforzo di mantenere la domanda concisa e documentare la mia ricerca (e ho trascorso un'intera giornata di ricerche), immagino di aver lasciato fuori la domanda reale. Quando modifico attentamente le persone sembrano considerare la brevità come una mancanza di ricerca. Se la domanda è troppo dettagliata, viene ignorata. Indipendentemente da ciò, la domanda viene criticata (sono stati eliminati diversi commenti decisamente maleducati). Anche le mie domande "famose" sono state inizialmente fortemente ridimensionate.
geneorama,

1
@geneorama Se ti è di consolazione, la tua domanda mi ha aiutato a saperne di più su git bash, prima ancora di leggere la risposta. Ma capisco cosa intendi.
walen

4

sfondo

Sono l'OP. Inizialmente volevo solo sapere il nome formale di questa cosa che stavo usando.

Ora penso che il nome sia "Git Bash per Windows". Purtroppo la risposta completa è complicata perché questa cosa è in realtà un sacco di cose.

La risposta principale del 2016 inizialmente non mi è stata utile, ma è stata pesantemente modificata e sempre più utile. Tuttavia, manca una parte della mia domanda originale.

L'inizio: msysgit

In realtà, l'inizio è probabilmente MSYS, ma davvero MSYS2. Il termine "msysgit" è un buon termine da mettere in una ricerca per capire cosa sta succedendo quando XYZ va storto; cose come "dove in @ * #! sono memorizzate tutte le impostazioni di autocrlf?!?!?!?"

Il file README ( https://github.com/msysgit/msysgit ) nel progetto msysgit spiega la relazione tra i componenti:

La relazione tra msysGit e Git per Windows

Git per Windows è il pacchetto software che installa un ambiente minimo per eseguire Git su Windows. Viene fornito con un Bash (una shell di tipo Unix), con un interprete Perl e con l'eseguibile Git e le sue dipendenze.

D'altra parte, msysGit è il pacchetto software che installa l' ambiente di compilazione in grado di creare Git per Windows. Il modo più semplice è installarlo tramite Net Installer .

La differenza tra MSYS e MinGW

L' obiettivo del progetto MinGW è fornire un modo per compilare binari Windows nativi senza layer POSIX usando il compilatore GNU C.

Tuttavia, almeno Bash ha bisogno di un livello POSIX (in particolare a causa dell'assenza della fork()chiamata su Windows). Pertanto, viene inserito MSYS (il sistema minimo ), che offre il sistema minimo necessario per offrire la funzionalità Bash (e Perl) su Windows.

Di conseguenza, MSYS viene fornito con un livello POSIX (basato su una vecchia versione di Cygwin) che viene utilizzato solo da Bash e Perl, ma non da nulla compilato all'interno di quell'ambiente.

A proposito, nel caso in cui il README completo venga cancellato, l'ho copiato in un senso .

La finestra del terminale: mintty

L'altra parte di Git Bash per Windows è l'attuale riga di comando di Windows, nuova. Per fortuna esiste, ma non è qualcosa di cui ho bisogno per google.

Riferimenti per MSYS2

La loro wiki è un vero e proprio scrigno di dettagli sull'ambiente MSYS2: https://github.com/msys2/msys2/wiki

Nell'introduzione, questa parte è più rilevante per la mia domanda originale:

MSYS2 compone di tre sottosistemi ei corrispondenti repository di pacchetti, msys2, mingw32, e mingw64.

Anche questa discussione è molto utile: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e


1
"Di conseguenza, MSys viene fornito con un livello POSIX ( basato su una vecchia versione di Cygwin ) ..." - questo mi ha aiutato a concludere che l'installazione di git su Cygwin rende ridondante 'Git Bash per Windows', quindi posso semplicemente disinstallarlo.
Daniel Sokolowski il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.