Git unter Windows: MSYS oder Cygwin?

80

Ich habe vor, meine Projekte auf git zu migrieren, und frage mich derzeit, welche Option unter Windows die beste und / oder stabilste ist.

Soweit ich weiß, habe ich grundsätzlich 2,5 Optionen:

  1. MSYSgit
  2. Git unter Cygwin
  3. (aka 2.5) MSYSgit von einer Cygwin-Eingabeaufforderung (vorausgesetzt, Cygwin git ist bereits installiert).

Hinweis: IMO Cygwin an sich ist ein großes Plus, da Sie auf nahezu alle * nix-Befehlszeilentools zugreifen können, da Sie mit MSYSgit bash nur auf eine relativ kleine Teilmenge dieser Tools zugreifen können.

Welche Option würden Sie angesichts dessen vorschlagen?

joce
quelle

Antworten:

60

Bearbeiten (2 weitere Jahre später: Oktober 2014)

Johannes Schindelin hat gerade erklärt (Okt. 2014), dass msysgit ausläuft :

Wir haben jetzt ein leichtes Git für Windows SDK - das im Wesentlichen ein Standard-MinGW / MSys-System ist, das über den Paketmanager mingw-get verwaltet wird.

Wir haben uns entschlossen, den Namen "msysGit" (sowie die gleichnamige GitHub- Organisation) einfach auslaufen zu lassen und an Git für Windows (mit der entsprechenden GitHub-Organisation) zu arbeiten und den Namen "Git für Windows" für das angestrebte Installationsprogramm zu verwenden unter "Endbenutzer" und "Git für Windows SDK" für die Entwicklungsumgebung für Git für Windows-Entwickler).


Bearbeiten (3 Jahre später: April 2012)

MsysGit (jetzt auf GitHub ) ist der richtige Weg, wenn Sie einen leichten Schnellstart in der Git-Welt wünschen: Entpacken Sie das Archiv, starten Sie git-cmd.batoder git-bash.batund Sie sind fertig.
Die neueste Version (1.7.10, April 2012) unterstützt jetzt UTF-8 , das auch in GitExtension enthalten ist . Vergiss aber nicht, deine autocrlfauf false zu setzen .

Wenn Sie wirklich alle anderen Unix-Befehle vermissen, die keine Pakete mit msysgit sind, laden Sie einfach eine Version von GoW (Gnu unter Windows) mit dem treffenden Namen "Die leichtgewichtige Alternative zu Cygwin" herunter .
Ich meine: 130 Unix-Befehle ...

Cygwin sollte nur in bestimmten Fällen eine Sicherungslösung sein, z. B. für die Übertragungsgeschwindigkeit großer Git-Repositorys, wie unten vom Inkrementor in seiner Antwort erwähnt .


Juni 2012: Wenn Sie mit GitHub interagieren möchten , haben Sie jetzt http://windows.github.com (siehe auch " Entwerfen von GitHub für Windows ").
Es konfiguriert nicht nur die SSH-Schlüssel für Sie (und fügt den generierten öffentlichen Schlüssel Ihrem GitHub-Profil hinzu), sondern installiert für alle Git-Vorgänge auch ein ... MsysGit.


Ursprüngliche Antwort (April 2009)

Ich habe kein Problem mit der neuesten Version von MsysGit:
Ich verwende die Option 2 , dh ich füge nur das Verzeichnis git \ bin zur Umgebungsvariablen PATH hinzu, ohne jedoch einige integrierte Windows-Tools zu überschreiben.

Ich habe es geschafft, externe Tools wie Notepad ++ und WinMerge (oder DiffMerge) zu definieren.

Ich habe erfolgreich Skripte wie svn2git ausgeführt, da sie in MsysGit1.6.2 + den git svnBefehl ' ' enthalten.

Und schließlich freue ich mich auf MsysGit1.6.2.3, denn es wird endlich git filter-branchden Befehl ' ' enthalten ! (eine langsame Version von Filter-Branch, aber immer noch).

Für den Unix-Befehl bevorzuge ich die Installation eines GnuWin32-Coreutils-Pakets und verwende sie nur, wenn ich sie benötige.

Alles in allem verwende ich also nicht die Cygwin-Ebene und habe es geschafft, Git in der Windows-basierten Version MsysGit sehr gut auszuführen.

VonC
quelle
Ich benutze auch p4merge, was ziemlich cool ist. Ich habe gelesen, dass es Probleme mit Git- und Unicode-Dateinamen gibt.
Benjol
Vielen Dank für den Link zur Frage zur Einstellung von core.editor. (Ich habe versucht, Notepad ++ mit Befehlszeilenschaltern wie -nosession und -multiInst zu verwenden)
mbx
Diese Antwort antwortet nicht wirklich, warum man eine über die andere verwenden würde. Es gibt bessere Antworten unter IMO
Sebastien Martin
@SebastienMartin sollten Sie es in diesem Fall dem OP (Joce) mitteilen. Andernfalls wird er nicht über die bessere Antwort informiert, die er auswählen sollte.
VonC
@SebastienMartin Ich habe diese alte Antwort mit aktuelleren Informationen aktualisiert.
VonC
15

Ja. Alte Frage. Neue Antwort:

Wir verwenden MSYSgit seit ungefähr 2 Jahren in einer großen Bereitstellung. Die Übertragungsgeschwindigkeit von einem lokalen Git-Repository-Server wurde auf weniger als 5 MiB / s begrenzt. Frühere Untersuchungen des Problems ergaben, dass das Problem darin bestand, dass MSYS-Entwickler unter Windows XP und Windows 7 sicherheitsbeschränkende Verbindungen über die Eingabeaufforderung / Bash-Shell hatten. Dies scheint tatsächlich nicht das Problem zu sein.

Ich entdeckte Darrell Mozingos Blogposting und testete einen Klon eines großen (viele GiB) Repos nur mit einer Cygwin-Installation. Die Übertragungsgeschwindigkeiten lagen im Bereich von 30 MiB / s. Das Problem ist, dass MSYSgit eine antike OpenSSH-Binärdatei aus dem Jahr 2007 verwendet.

Zu diesem Zweck empfehle ich jetzt, bis dies behoben ist, eine Umstellung auf Cygwin (obwohl die Version von git etwas zurückliegt). Ich fand auch, dass Cygwin stabiler ist und weniger wahrscheinlich ist, dass Perl nicht mehr genügend Speicher hat.

Inkrementor
quelle
Es sieht so aus, als ob MinGW OpenSSH 5.4 verwendet, das aus dem Jahr 2010 stammt
Steven Penny,
9

Ich habe mich sowohl mit der MSYS- als auch mit der Cygwin-Version von git beschäftigt, und um ehrlich zu sein, fand ich keine der beiden Erfahrungen besonders gut. Ich glaube nur noch nicht, dass Git wirklich für Windows bereit ist.

Ein Problem, das ich bei der MSYS-Version festgestellt habe, ist, dass die Zeilenenden Ihrer (nicht binären) Dateien vom UNIX-Stil (Zeilenvorschub) in den DOS-Stil (Wagenrücklauf / Zeilenvorschub) konvertiert werden. Sie können dies als Fehler oder Feature betrachten, aber es gibt keine Möglichkeit, das Verhalten zu ändern, das ich finden konnte. (BEARBEITEN: Setzen Sie die Konfigurationsvariable core.autocrlfauf false. Danke Brian.)

OTOH, die MSYS-Version von git verfügt über einige GUI-Funktionen, die in der Cygwin-Version nur verfügbar sind, wenn Sie einen ganzen X-Server installieren und ausführen möchten. (Danke Joce, dass du das bestätigt hast.)

Mein Eindruck ist, dass die MSYS-Version populärer ist, obwohl dies möglicherweise daran liegt, dass Sie kein Cygwin-Ökosystem installieren müssen, um es zu verwenden. (Und ich stimme zu, Cygwin ist äußerst nützlich.)

Persönlich würde ich entweder mit Bazaar oder Mercurial gehen , die beide eine bessere Unterstützung für Windows IMO haben.

Evan
quelle
3
Bazaar war auch meine Lösung für die Frage von Git unter Windows. Heh.
Instance Hunter
9
Sie können die Übersetzung am Zeilenende deaktivieren. Sie müssen nur core.autocrlf auf false setzen.
Brian Campbell
1
Wir prüfen derzeit unsere Optionen für eine Auswahl von DCVS. Mercurial ist auf der Liste. Die Kosten für die Verzweigung, insbesondere für sehr große Projekte, sind jedoch ziemlich niedrig. Der Cygwin dist wird mit einem GUI-Frontend geliefert (auf Kosten des Betriebs eines X-Servers). Ich bin mir jedoch nicht ganz sicher, wie viel Wert es bringt.
Joce
3
Ich verwende die msys-Version und habe keine Probleme.
Ikke
2
Ich denke, die neueste Version von msys fordert Sie auf, zu konfigurieren, wie Zeilenenden bei der Installation behandelt werden.
Ken Liu
7

Sowohl Cygwin als auch Msys Git funktionieren für normale Anwendungsfälle ziemlich gut. Wenn Sie Skripte wie git-svn verwenden möchten, ist Cygwin die bessere Wahl. Als alter Windows-Benutzer, der endlich auf Linux umgestiegen ist, kann ich definitiv sagen, dass Cygwin ein großer Segen ist und es wert ist, an und für sich zu haben.

Der Kontext ist jedoch wichtig; Welche Projekte sind das? Von wem werden sie benutzt? Etc.

Edward Z. Yang
quelle
2
Wir sprechen von einem ziemlich großen Projekt (32K + Quelldateien), das von einem eher kleinen Team (~ 10 Progs) entwickelt wurde. Nicht alle von ihnen sind kompetent mit einer nix-Umgebung, aber die Einfachheit von Git für den täglichen Gebrauch sieht vielversprechend aus. Wir planen auch, häufig Verzweigungen zu verwenden, z. B. eine P4-Änderungsliste <=> Eine Git-Verzweigung. Allein aus diesem Grund ist Git viel interessanter als beispielsweise Hg. Ich befürchte, dass die Cygwin-Version in Cygwin vs. MSYS nicht so aktuell ist wie die MSYS-Version.
Joce
6

Ich habe auch beide Welten getestet (CygWin und MSysgit). Meine Erfahrung ist auch, dass es einige Mängel in der MSysgit-Bash gibt. Git Stash kann nicht erfolgreich ausgeführt werden, während Cygwin es ordnungsgemäß auf demselben Git Repo handhabt.

Es wurde jedoch noch keine gründliche Analyse durchgeführt ...

PatrikS
quelle
4

Ich benutze Msysgit derzeit zusammen mit TortoiseGit.

Die MsysGit-Benutzeroberfläche gefällt mir nicht wirklich, daher verwende ich ein bekanntes Tool wie TortoiseGit und verwende bei der Arbeit an der Befehlszeile (meistens) die Git-Binärdatei von Msysgit

Migräne
quelle
3

Ich würde msysgit empfehlen. Insbesondere wenn es mit Git-Erweiterungen verwendet wird : Es bietet eine einfache Möglichkeit, die Umgebung zu konfigurieren: Editor / Diff / Merge-Tools und ermöglicht erweiterte Git-Operationen über die Benutzeroberfläche.

Konstantin Tenzin
quelle
1

Ich bin auf schwerwiegende Fehler in der Cygwin-Implementierung von MSys gestoßen: Einige Befehle, insbesondere die Rebase, waren sehr fehleranfällig. Cygwins war für mich viel stabiler.

Das heißt, es war vor einem Monat, könnte sich seitdem verbessert haben.

Alex Gontmakher
quelle
3
"MSys Cygwin"? meinst du nicht MSys Git?
Joce
2
@ Alex Gontmakher Vielleicht ist es stabiler, aber es ist auch langsam zu Tode. Siehe diesen Beitrag: stackoverflow.com/questions/6724471/…
WinWin
1

Ich habe sowohl Cygwin Git als auch Msysgit mit Windows verwendet. Ich würde vorschlagen, Cygwin + Git zu verwenden. Cygwin 1.7 (derzeit in der Beta) adressiert eine wichtige Nuance (zumindest für mich) bei der Verwendung von Git Gui und Gitk. Frühere Versionen von Cygwin haben jedes Mal, wenn ich etwas in git-gui oder gitk mache, 10 cm cmd-Fenster geöffnet. Dies wurde in 1.7 angesprochen. Cygwins mächtige Shell bringt auch viele Extras des Linux-Terminals.

Trotzdem hat sich Msysgit ziemlich weiterentwickelt und ist unter Windows sehr nützlich. Ich hatte jedoch einige Probleme.

Berechtigungsproblem: Einige Dateien, die nativ in Windows erstellt wurden, hatten den Modus 755, der bei Verwendung von Msysgit in 644 konvertiert wurde. Dies würde als geänderte Dateien angezeigt. Ein Check-in sollte dieses Problem beheben.

CRLF: Die schwer fassbare CRLF verursacht wie gewohnt Probleme in Windows. Msysgit meldet möglicherweise Dateien als geändert. Dies kann durch Auswahl von "Zeilenenden unverändert lassen" (den genauen Text vergessen) während der Installation von Msysgit behoben werden.

Daemon: Und ja, ich finde es immer noch schwierig, einen Git-Daemon in Msysgit einzurichten.

Sankara
quelle
1

Neue Antwort auf eine alte Frage ...

Ich verwende Git 1.7.3 aus einer Windows 7-Cmd-Shell und es funktioniert großartig. Ich benutze eine Mischung aus Git-Kommandozeile und Git-GUI, und beide funktionieren seit Monaten einwandfrei. Wir hatten Probleme mit Wagenrücklauf / Zeilenvorschub, die sich verschlimmerten, als wir dem Team Mac-Entwickler hinzufügten, aber diese wurden behoben mit ...

core.autocrlf=true
core.safecrlf=false

Das heißt nicht, dass Sie keine * nix-y-Shell verwenden sollten, nur dass dies nicht erforderlich ist.

yoyo
quelle
0

Ich habe Vorbehalte gegenüber CygWin, weil ich nur Git und keines der anderen Tools, die Cygwin einsetzen möchte, möchte. Normalerweise soll Ihr Windows-Computer wie ein Windows-Computer funktionieren und CygWin möchte auf etwas völlig anderes klatschen. Das Schlagen auf * nix-Funktionalität nur für die Kicks ist nicht zu gehen.

Die Sache ist, wenn ich jemals mit * nix wie einer Befehlszeile arbeiten möchte, würde ich zu meinem Linux-Computer gehen und stattdessen an diesem Computer arbeiten. Virtuelle Computer und Remote-Desktops funktionieren heutzutage wie ein Zauber und sind für Entwickler ausreichend zugänglich.

Es muss wirklich einen legitimen Grund für die Verwendung von CygWin geben. Wenn es nur für die Verwendung von Git ist, würde ich vorschlagen, dass Sie stattdessen MSysGit verwenden, was meine Präferenz ist. Es funktioniert sehr gut mit den mitgelieferten Gitk- und Git-GUI-Tools. Ich habe sowohl an Eclipse als auch an Visual Studio mit msysgit gearbeitet und es funktioniert wie ein Zauber.

Das einzige, worauf ich jetzt warte, ist ein voll funktionsfähiger Tortoise-Klon für Git .

Spoike
quelle
Und es scheint mindestens am 13.03.17 Cygwin ist bei 2.8.3 Git und ich hatte ein paar Perl-Probleme beim Update. Git Bash MinGW ist bei 2.12.
Mark
0

Es gibt ein Szenario unter Windows , wo man einfach haben Git über Cygwin verwenden: Dies ist , wenn Sie Git gegen einen SVN - Server verwenden möchten, die als 1,5 - Client - Versionen höher SVN erwartet. Es gibt SVN-Pre-Commit-Hooks, die Commits blockieren, wenn kein 'mergeinfo'-Argument vorhanden ist - und das' mergeinfo'-Argument ist in SVN erst seit Version 1.5 Standard. Das Problem mit msysGit ist, dass es gegen eine ältere SVN-Version (1.4.6) erstellt wurde, sodass Sie in diesem Fall kein erfolgreiches Commit durchführen können. Mit Cygwins Git ist dies jedoch möglich, da es gegen neuere SVN-Versionen erstellt wurde.

UFO
quelle
0

Wenn Sie nur einfache Aktionen wie Push / Pull / Branching ausführen möchten, können Sie SourceTree von Atlasian ausprobieren. Eine sehr einfache und übersichtliche Benutzeroberfläche für den Git-Befehl. Es hat jedoch einen Mangel.

Wenn Sie das Befehlszeilen-Git-Tool verwenden müssen, holen Sie sich einfach das Git für Windows-Tool. Es sollte ausreichen, es sei denn, Sie suchen nach Bash-Skripten.

thoroc
quelle