Git sotto Windows: MSYS o Cygwin?

Ho intenzione di migrare i miei progetti a git, e attualmente mi sto chiedendo quale sia l’opzione migliore e / o più stabile sotto Windows.

Da quello che ho raccolto ho fondamentalmente 2,5 opzioni:

  1. msysgit
  2. cesso sotto Cygwin
  3. (aka 2.5) MSYSgit da un prompt Cygwin (dato che Cygwin git è già installato).

Nota: IMO Cygwin è di per sé un grande vantaggio in quanto è ansible avere accesso a quasi tutti gli strumenti a linea di comando * nix, poiché in MSYSgit bash è ansible accedere solo a un sottoinsieme piuttosto piccolo di questi strumenti.

Detto questo, quale opzione suggeriresti?

Modifica (altri 2 anni dopo: ottobre 2014)

Johannes Schindelin ha appena spiegato (ottobre 2014) che msysgit è stato eliminato gradualmente :

ora abbiamo un Git leggero per Windows SDK , che è essenzialmente un sistema MinGW / MSys standard gestito tramite il gestore pacchetti mingw-get.

Abbiamo deciso di eliminare gradualmente il nome “msysGit” (così come l’ org GitHub con lo stesso nome ) e di lavorare su Git per Windows (con l’organizzazione GitHub corrispondente) , e usando il nome “Git per Windows” per l’installer mirato a “utenti finali” e “Git per Windows SDK” per l’ambiente di sviluppo rivolto agli sviluppatori Git per Windows).


Modifica (3 anni dopo: aprile 2012)

MsysGit (ora su GitHub ) è la strada da percorrere se si desidera un avvio rapido leggero in Git world: decomprimere l’archivio, avviare git-cmd.bat o git-bash.bat e il gioco è fatto.
La sua ultima versione (1.7.10, aprile 2012) ora include il supporto per UTF-8 , incluso anche in GitExtension . Non dimenticare di impostare il tuo autocrlf su false però.

Se ti mancano davvero tutti gli altri comandi unix non i pacchetti con msysgit, basta scaricare una versione di GoW (Gnu su Windows) , opportunamente chiamata “L’alternativa leggera a Cygwin”.
Voglio dire: 130 unix command s …

Cygwin dovrebbe essere una soluzione di backup solo per determinati casi, come la velocità di trasferimento di grandi repository Git, come indicato di seguito dall’incremento nella sua risposta .


Giugno 2012: se vuoi interagire con GitHub , ora hai http://windows.github.com (vedi anche ” Progettazione di GitHub per Windows “).
Non solo configurerà le chiavi ssh per te (e aggiungerà la chiave pubblica generata al tuo profilo GitHub), ma installerà anche, per tutte le operazioni git, un … MsysGit.


Risposta originale (aprile 2009)

Non ho problemi con l’ultima versione di MsysGit:
Io uso l’ opzione 2 , il che significa che aggiungo solo la directory git \ bin alla variabile d’ambiente PATH, ma senza sovrascrivere alcuni strumenti di Windows incorporati.

Sono riuscito a definire strumenti esterni come Notepad ++ e WinMerge (o DiffMerge)

Ho eseguito correttamente script come svn2git perché, da MsysGit1.6.2 +, include il comando ‘ git svn ‘.

E finalmente non vedo l’ora che MsysGit1.6.2.3 includa finalmente il comando ‘ git filter-branch ‘ ! (una versione lenta di filter-branch, ma ancora).

Per il comando Unix, preferisco installare un pacchetto coreutils di GnuWin32 e usarli solo quando ne ho bisogno.

Quindi, tutto sumto, non utilizzo il layer Cygwin e sono riuscito a eseguire Git molto bene nella sua versione basata su Windows MsysGit.

Sì. Vecchia domanda Nuova risposta:

Utilizziamo MSYSgit da circa 2 anni in una grande distribuzione. La velocità dei trasferimenti da un server di repository git locale è stata limitata a meno di 5 MiB / s. Indagini precedenti sul problema indicavano che il problema era con gli sviluppatori di MSYS in Windows XP e Windows 7 che limitavano le connessioni dalla shell di prompt dei comandi / bash. Questo non sembra essere, in effetti, il problema.

Ho scoperto il post sul blog di Darrell Mozingo e ho testato un clone di un repository grande (molti GiB) usando solo un’installazione Cygwin. Le velocità di trasferimento erano comprese nell’intervallo di 30 MiB / s. Il problema è che MSYSgit utilizza un binario OpenSSH antico del 2007.

A tal fine, fino a quando non verrà risolto, ora sto raccomandando un passaggio a Cygwin (anche se la versione di git è un po ‘indietro). Ho anche trovato Cygwin più stabile e meno probabile che perl esaurisca la memoria.

Mi sono dilungato con l’uso delle versioni MSYS e Cygwin di git, e per essere sincero, non ho trovato nessuna esperienza particolarmente positiva. Non penso che Git sia ancora pronto per Windows.

Detto questo, un problema che ho riscontrato con la versione MSYS è che convertirà le terminazioni di riga sui file (non binari) dallo stile UNIX (line-feed) allo stile DOS (carriage-return / line-feed). Si può considerare questo un bug o una funzionalità, ma non c’è modo di cambiare il comportamento che ho potuto trovare. (MODIFICA: core.autocrlf variabile di configurazione core.autocrlf su false . Grazie Brian.)

OTOH, la versione MSYS di git ha alcune funzionalità GUI che non sono disponibili nella versione cygwin a meno che non si voglia installare ed eseguire un intero server X. (Grazie Joce per aver confermato questo.)

La mia impressione è che la versione MSYS sia più popolare, anche se ciò potrebbe essere dovuto al fatto che non è necessario installare un ecosistema cygwin per utilizzarlo. (E sono d’accordo, cygwin è estremamente utile).

Personalmente, andrei con Bazaar o Mercurial , entrambi i quali hanno un supporto migliore per Windows IMO.

Sia Cygwin che Msys Git funzionano abbastanza bene per casi d’uso normali. Se si desidera utilizzare script come git-svn, Cygwin è una scelta migliore. Come vecchi utenti di Windows che finalmente sono passati a Linux, posso sicuramente dire che Cygwin è un grande vantaggio e vale la pena avere di per sé.

Il contesto è importante però; quali progetti sono questi? Da chi sono usati? Eccetera.

Ho anche testato entrambi i mondi (CygWin e MSysgit), le mie esperienze sono anche che ci sono alcuni difetti nella bash di MSysgit. Imansible eseguire git stash con successo mentre Cygwin lo gestiva con garbo sullo stesso repository git.

Nessuna analisi approfondita ancora eseguita, sebbene …

Attualmente utilizzo Msysgit insieme a TortoiseGit.

L’interfaccia utente di MsysGit non è proprio di mio gradimento, quindi uso uno strumento familiare come TortoiseGit e quando lavoro sulla riga di comando (il più delle volte), uso il git binary da Msysgit

Consiglierei msysgit. Soprattutto se viene utilizzato con Git Extensions : fornisce un modo semplice per configurare l’ambiente: editor / diff / merge tools e consente di eseguire operazioni git avanzate dall’interfaccia utente.

Ho riscontrato gravi errori nell’implementazione cygwin di MSys: alcuni comandi, in particolare il rebase, erano abbastanza inclini al fallimento. Cygwin’s era molto più stabile per me.

Detto questo, è stato un mese fa, potrebbe essere migliorato da allora.

Ho usato sia Cygwin Git che Msysgit con Windows. Suggerirei di usare Cygwin + Git. Cygwin 1.7 (attualmente in versione beta) affronta una grande sfumatura (almeno per me) durante l’utilizzo di git gui e gitk. Le versioni precedenti di Cygwin aprivano 10s di cmd windows ogni volta che facevo qualcosa in git-gui o gitk. Questo è stato risolto in 1.7. La potente shell di Cygwin porta anche molte delle novità del terminale Linux.

Detto questo, Msysgit si è evoluto parecchio ed è davvero utile in Windows. Ho affrontato un paio di problemi però.

Problema di authorization: alcuni file creati in modo nativo in Windows avevano la modalità 755 che è stata convertita in 644 durante l’utilizzo di Msysgit. Questo apparirebbe come file modificati. Un check-in dovrebbe risolvere questo problema.

CRLF: l’inafferrabile CRLF come al solito crea problemi in Windows. Msysgit potrebbe segnalare file come modificati. Questo può essere risolto selezionando “Lascia la fine della riga invariata” (dimenticato il testo esatto) durante l’installazione di Msysgit.

Daemon: E sì, sto ancora trovando difficile configurare git daemon in Msysgit.

Nuova risposta a una vecchia domanda …

Sto usando git 1.7.3 da una shell di Windows 7 cmd, e funziona benissimo. Io uso un mix di git command line e git gui, ed entrambi hanno funzionato bene per mesi. Abbiamo avuto problemi di ritorno a capo / avanzamento riga, esacerbati quando abbiamo aggiunto gli sviluppatori Mac al team, ma questi sono stati risolti con …

 core.autocrlf=true core.safecrlf=false 

Non dicendo che non dovresti usare una shell * nix-y, solo che non è necessario.

Ho delle riserve nei confronti di CygWin perché voglio solo git e non gli altri strumenti che Cygwin vuole inserire. Normalmente vuoi che il tuo computer Windows funzioni come un computer Windows e CygWin vuole dare uno schiaffo a qualcosa di completamente diverso. Schiaffeggiare sulla funzionalità * nix solo per i calci non è quello di andare.

Il fatto è che se mai dovessi lavorare con * nix come una riga di comando, andrei sulla mia macchina Linux e lavoro su quel computer. I computer virtuali e i desktop remoti funzionano come un fascino al giorno d’oggi ed è abbastanza accessibile per gli sviluppatori.

C’è davvero bisogno di essere una ragione legittima per usare CygWin. Se è solo per usare git ti suggerirei di usare MSysGit, che è la mia preferenza. Funziona molto bene con gli strumenti gitk e git-gui che sono in bundle. Ho lavorato su Eclipse e Visual Studio usando msysgit e funziona come un fascino.

L’unica cosa che sto aspettando è un clone di Tortoise completamente funzionante per git .

C’è uno scenario in Windows in cui devi semplicemente usare Git tramite Cygwin: questo è quando vuoi usare Git contro un server SVN, che si aspetta versioni del client SVN superiori a 1.5. Esistono hook di pre-commit SVN che bloccano i commit quando non c’è un argomento ‘mergeinfo’ – e l’argomento ‘mergeinfo’ è predefinito in SVN solo dalla versione 1.5. Il problema con msysGit è che è compilato su una versione SVN precedente (1.4.6), quindi in questo caso non è ansible eseguire correttamente il commit. Ma è ansible con Cygwin’s Git, dato che è costruito contro le nuove versioni SVN.

Se vuoi semplicemente fare semplici azioni come push / pull / branching puoi provare SourceTree da Atlasian. Un’interfaccia utente molto semplice e chiara per il comando Git. Tuttavia ha poco a venire.

Se hai bisogno di usare lo strumento git della riga di comando, scarica lo strumento Git for windows. Dovrebbe essere sufficiente, a meno che non inizi a cercare in bash scripting.