Git pod oknami: MSYS czy Cygwin?

80

Planuję przenieść swoje projekty do git i obecnie zastanawiam się, która opcja jest najlepsza i / lub najbardziej stabilna pod Windows.

Z tego, co wiem, mam w zasadzie 2,5 opcji:

  1. MSYSgit
  2. git pod Cygwin
  3. (aka 2.5) MSYSgit z zachęty Cygwin (zakładając, że Cygwin git jest już zainstalowany).

Uwaga: IMO Cygwin samo w sobie jest dużym plusem, ponieważ możesz mieć dostęp do prawie wszystkich narzędzi wiersza poleceń * nix, ponieważ w przypadku MSYSgit bash masz dostęp tylko do raczej niewielkiego podzbioru tych narzędzi.

Biorąc to pod uwagę, jaką opcję byś zaproponował?

joce
źródło

Odpowiedzi:

60

Edytuj (jeszcze 2 lata później: październik 2014)

Johannes Schindelin właśnie wyjaśnił (październik 2014), że msysgit zostaje wycofany :

mamy teraz lekki zestaw Git dla Windows SDK - który jest zasadniczo standardowym systemem MinGW / MSys zarządzanym przez menedżera pakietów mingw-get.

Zdecydowaliśmy się po prostu wycofać nazwę "msysGit" (jak również GitHub org o tej samej nazwie ) i pracować nad Git for Windows (z odpowiednią organizacją GitHub) , używając nazwy "Git for Windows" dla instalatora mającego na celu w sekcji „użytkownicy końcowi” i „Git for Windows SDK” dla środowiska programistycznego przeznaczonego dla deweloperów Git for Windows).


Edytuj (3 lata później: kwiecień 2012)

MsysGit (teraz na GitHub ) to dobry sposób na szybki start w świecie Git: rozpakuj archiwum, uruchom git-cmd.batlub git-bash.bati gotowe.
Jego najnowsza wersja (1.7.10, kwiecień 2012) obejmuje teraz obsługę UTF-8 , również zawartą w GitExtension . Nie zapomnij jednak ustawić swojego autocrlfna fałsz .

Jeśli naprawdę brakuje ci wszystkich innych poleceń unixa, a nie pakietów z msysgit, po prostu pobierz wydanie GoW (Gnu dla Windows) , trafnie nazwane „Lekka alternatywa dla Cygwin”.
Mam na myśli: 130 poleceń unixa ...

Cygwin powinien być rozwiązaniem do tworzenia kopii zapasowych tylko w niektórych przypadkach, takich jak szybkość transferu dużych repozytoriów Git, jak wspomniano poniżej w swojej odpowiedzi inkrementor .


Czerwiec 2012: jeśli chcesz współdziałać z GitHubem , masz teraz http://windows.github.com (zobacz także „ Projektowanie GitHub dla Windows ”).
Nie tylko skonfiguruje dla Ciebie klucze ssh (i doda wygenerowany klucz publiczny do Twojego profilu GitHub), ale także zainstaluje, dla wszystkich operacji git, plik ... MsysGit.


Oryginalna odpowiedź (kwiecień 2009)

Nie mam problemu z najnowszą wersją MsysGit:
używam opcji 2 , co oznacza, że ​​dodaję tylko katalog git \ bin do zmiennej środowiskowej PATH, ale bez nadpisywania niektórych wbudowanych narzędzi systemu Windows.

Udało mi się zdefiniować narzędzia zewnętrzne, takie jak Notepad ++ i WinMerge (lub DiffMerge)

Z powodzeniem uruchomiłem skrypty, takie jak svn2git, ponieważ od MsysGit1.6.2 + zawiera polecenie „ git svn”.

I wreszcie nie mogę się doczekać MsysGit1.6.2.3, ponieważ wreszcie będzie zawierał git filter-branchpolecenie ' ' ! (powolna wersja filter-branch, ale nadal).

W przypadku polecenia Unix wolę zainstalować pakiet coreutils GnuWin32 i używać ich tylko wtedy, gdy ich potrzebuję.

Podsumowując, nie używam warstwy Cygwin i udało mi się bardzo dobrze uruchomić Gita w jego wersji MsysGit opartej na systemie Windows.

VonC
źródło
Używam też p4merge, co jest całkiem fajne. Czytałem, że są problemy z nazwami plików git i Unicode.
Benjol
Dzięki za link do pytania o ustawienie core.editor. (Próbowałem użyć Notepad ++ z przełącznikami wiersza poleceń, takimi jak -nosession i -multiInst)
mbx
Ta odpowiedź tak naprawdę nie wyjaśnia, dlaczego jeden miałby używać jednego nad drugim. Lepsze odpowiedzi są poniżej IMO
Sebastien Martin
@SebastienMartin powinieneś wspomnieć o tym OP (Joce) w takim przypadku. W przeciwnym razie nie zostanie powiadomiony o lepszej odpowiedzi, którą powinien wybrać.
VonC
@SebastienMartin Zaktualizowałem tę starą odpowiedź o bardziej aktualne informacje.
VonC,
15

Tak. Stare pytanie. Nowa odpowiedź:

Używamy MSYSgit od około 2 lat w dużym wdrożeniu. Szybkość transferów z lokalnego serwera repozytorium git została ograniczona do mniej niż 5 MiB / s. Wcześniejsze badanie problemu wskazywało, że problem dotyczył programistów MSYS pracujących w systemie Windows XP i Windows 7, które ograniczały połączenia z wiersza poleceń / powłoki bash. W rzeczywistości nie wydaje się to być problemem.

Odkryłem posty na blogu Darrella Mozingo i przetestowałem klon dużego (wiele GiB) repozytorium przy użyciu tylko instalacji Cygwin. Prędkości transferu mieściły się w zakresie 30 MiB / s. Problem polega na tym, że MSYSgit używa starego pliku binarnego OpenSSH z 2007 roku.

W tym celu, dopóki to nie zostanie naprawione, zalecam teraz przejście na Cygwin (mimo że wersja git jest nieco w tyle). Odkryłem również, że Cygwin jest bardziej stabilny i mniej prawdopodobne, że zabraknie pamięci w perlu.

przyrost
źródło
Wygląda na to, że MinGW używa OpenSSH 5.4, który pochodzi z 2010 roku
Steven Penny
9

Próbowałem używać zarówno wersji MSYS, jak i Cygwin git, i szczerze mówiąc, żadne z tych doświadczeń nie było dla mnie szczególnie dobre. Po prostu nie sądzę, że git jest jeszcze naprawdę gotowy na Windows.

Biorąc to pod uwagę, jednym z problemów, które znalazłem w wersji MSYS, jest to, że konwertuje ona zakończenia linii w twoich (niebinarnych) plikach ze stylu UNIX (przesuw o wiersz) do stylu DOS (powrót karetki / wysuw linii). Możesz uznać to za błąd lub funkcję, ale nie ma sposobu, aby zmienić zachowanie, które mogłem znaleźć. (EDYCJA: ustaw zmienną konfiguracyjną core.autocrlfna false. Dzięki Brian).

OTOH, wersja MSYS git ma pewne funkcje GUI, które nie są dostępne w wersji cygwin, chyba że chcesz zainstalować i uruchomić cały serwer X. (Dzięki Joce za potwierdzenie tego).

Mam wrażenie, że wersja MSYS jest bardziej popularna, chociaż może to wynikać z faktu, że nie trzeba instalować ekosystemu cygwin, aby z niej korzystać. (I zgadzam się, cygwin jest niezwykle przydatny.)

Osobiście wybrałbym Bazar lub Mercurial , z których każdy ma lepszą obsługę IMO systemu Windows.

Evan
źródło
3
Bazaar był również moim rozwiązaniem na kwestię Gita na Windowsie. Heh.
Instance Hunter
9
Możesz wyłączyć tłumaczenie końca linii. Musisz tylko ustawić core.autocrlf na false.
Brian Campbell
1
Obecnie sprawdzamy nasze opcje wyboru DCVS. Mercurial jest na liście. Jednak koszt rozgałęziania, szczególnie w przypadku bardzo dużych projektów, jest dość zwrotny. Cygwin dist jest dostarczany z interfejsem GUI (kosztem uruchomienia serwera X). Jednak nie jestem do końca pewien, jaką wartość dodaje.
joce
3
Używam wersji msys i nie mam żadnych problemów.
Ikke
2
Myślę, że najnowsza wersja msys prosi o skonfigurowanie sposobu obsługi zakończeń linii podczas jej instalacji.
Ken Liu,
7

Zarówno Cygwin, jak i Msys Git działają dość dobrze w normalnych przypadkach użycia. Jeśli chcesz używać skryptów, takich jak git-svn, Cygwin jest lepszym rozwiązaniem. Jako starzy użytkownicy Windowsa, którzy w końcu wskoczyli na Linuksa, z pewnością mogę powiedzieć, że Cygwin jest wielkim dobrodziejstwem i warto go mieć sam w sobie.

Kontekst jest jednak ważny; jakie to projekty? Kto z nich korzysta? Itp.

Edward Z. Yang
źródło
2
Mówimy o dość dużym projekcie (32K + pliki źródłowe) opracowanym przez raczej mały zespół (~ 10 progów). Nie wszystkie z nich są sprawne w środowisku w / * nix, ale prostota gita do codziennego użytku wygląda obiecująco. Planujemy również dużo używać gałęzi, np. Jedna lista zmian P4 <=> Jedna gałąź git. Tylko z tego powodu git jest znacznie bardziej interesujący niż na przykład Hg. Obawiam się, że wersja Cygwin vs MSYS nie jest tak aktualna jak wersja MSYS.
joce
6

Przetestowałem również oba światy (CygWin i MSysgit), z mojego doświadczenia wynika również, że są pewne niedociągnięcia w bash MSysgit. Nie można pomyślnie uruchomić git stash, podczas gdy Cygwin obsługiwał go z wdziękiem na tym samym repozytorium git.

Jednak nie przeprowadzono jeszcze dogłębnej analizy ...

PatrikS
źródło
4

Obecnie używam Msysgit razem z TortoiseGit.

Interfejs użytkownika MsysGit nie bardzo mi się podoba, więc używam znanego narzędzia, takiego jak TortoiseGit, a podczas pracy z wierszem poleceń (przez większość czasu) używam pliku binarnego git z Msysgit

Tigraine
źródło
3

Polecam msysgit. Zwłaszcza jeśli jest używany z rozszerzeniami Git : zapewnia łatwy sposób konfiguracji środowiska: narzędzia edytora / porównywania / scalania oraz pozwala na wykonywanie zaawansowanych operacji git z poziomu interfejsu użytkownika.

Konstantin Tenzin
źródło
1

Napotkałem poważne błędy w implementacji cygwin w MSys: niektóre polecenia, zwłaszcza rebase, były dość podatne na awarie. Cygwin był dla mnie znacznie bardziej stabilny.

To powiedziawszy, to było miesiąc temu, od tego czasu mogło się poprawić.

Alex Gontmakher
źródło
3
„Cygwin MSys”? nie masz na myśli Git MSys?
joce
2
@Alex Gontmakher Może jest bardziej stabilny, ale jest też powolny do śmierci. Zobacz ten post: stackoverflow.com/questions/6724471/ ...
WinWin
1

Używałem zarówno Cygwin Git, jak i Msysgit w systemie Windows. Sugerowałbym użycie Cygwin + Git. Cygwin 1.7 (obecnie w wersji beta) rozwiązuje główny niuans (przynajmniej dla mnie) podczas korzystania z git gui i gitk. Wcześniejsze wersje Cygwina otwierały dziesiątki okien cmd za każdym razem, gdy robię coś w git-gui lub gitk. Problem ten został rozwiązany w wersji 1.7. Potężna powłoka Cygwina zawiera również wiele zalet terminala linux.

To powiedziawszy, Msysgit ewoluował całkiem sporo i jest naprawdę przydatny w systemie Windows. Jednak napotkałem kilka problemów.

Problem z uprawnieniami: kilka plików utworzonych natywnie w systemie Windows miało tryb 755, który został przekonwertowany na 644 podczas korzystania z Msysgit. To byłoby widoczne jako zmodyfikowane pliki. Zameldowanie powinno rozwiązać ten problem.

CRLF: wszystkie nieuchwytne CRLF, jak zwykle, powodują problemy w systemie Windows. Msysgit może zgłaszać pliki jako zmodyfikowane. Można to naprawić, wybierając opcję „Pozostaw końcówki wierszy niezmienione” (zapomniałem dokładnego tekstu) podczas instalacji Msysgit.

Daemon: I tak, nadal jest mi ciężko skonfigurować demona git w Msysgit.

sankara
źródło
1

Nowa odpowiedź na stare pytanie ...

Używam git 1.7.3 z powłoki cmd systemu Windows 7 i działa świetnie. Używam mieszanki wiersza poleceń git i git gui i oba działają dobrze od miesięcy. Mieliśmy problemy ze zwrotem karetki / wysuwem wiersza, zaostrzone, gdy dodaliśmy do zespołu programistów Mac, ale zostały one rozwiązane przez ...

core.autocrlf=true
core.safecrlf=false

Nie mówię, że nie powinieneś używać powłoki * nix-y, tylko że nie jest to konieczne.

yoyo
źródło
0

Mam zastrzeżenia do CygWina ponieważ chcę tylko gita, a nie innych narzędzi, które Cygwin chce włożyć. Zwykle chcesz, aby komputer z systemem Windows działał jak komputer z systemem Windows, a CygWin chce uderzyć w coś zupełnie innego. Klepanie funkcji * nix tylko dla kopnięć nie jest możliwe.

Chodzi o to, że jeśli kiedykolwiek chciałbym pracować z * nix jak wierszem poleceń, przeszedłem na mój komputer z Linuksem i zamiast tego pracowałem na tym komputerze. Komputery wirtualne i zdalne komputery stacjonarne działają obecnie jak urok i są wystarczająco dostępne dla programistów.

Naprawdę musi istnieć uzasadniony powód, aby używać CygWin. Jeśli jest to tylko do używania gita, sugerowałbym użycie MSysGit zamiast tego, co jest moim preferencją. Działa bardzo dobrze z dołączonymi narzędziami gitk i git-gui. Pracowałem zarówno nad Eclipse, jak i Visual Studio używając msysgit i działa to jak urok.

Jedyne, na co teraz czekam, to w pełni działający klon Tortoise dla git .

Spoike
źródło
Wygląda na to, że przynajmniej od 13.03.17 Cygwin jest w wersji 2.8.3 git i miałem trochę problemów z Perlem podczas aktualizacji. Git Bash MinGW to 2,12.
Mark
0

W systemie Windows jest jeden scenariusz, w którym po prostu musisz użyć Gita przez Cygwin: jest to sytuacja, w której chcesz użyć Gita przeciwko serwerowi SVN, który oczekuje wersji klienta SVN wyższych niż 1.5. Istnieją punkty zaczepienia SVN przed zatwierdzeniem, które blokują zatwierdzenia, gdy nie ma argumentu „mergeinfo” - a argument „mergeinfo” jest domyślny w SVN tylko od wersji 1.5. Problem z msysGit polega na tym, że jest zbudowany na starszej wersji SVN (1.4.6), więc nie możesz pomyślnie zatwierdzić w tym przypadku. Ale jest to możliwe dzięki Gitowi Cygwin, ponieważ jest zbudowany na nowszych wersjach SVN.

ufo
źródło
0

Jeśli chcesz wykonywać proste czynności, takie jak push / pull / branching, możesz wypróbować SourceTree firmy Atlasian. Bardzo prosty i przejrzysty interfejs użytkownika dla polecenia Git. Jednak nadchodzi krótki czas.

Jeśli chcesz użyć narzędzia git wiersza poleceń, po prostu pobierz narzędzie Git dla systemu Windows. Powinno wystarczyć, chyba że zaczniesz szukać w skryptach basha.

thoroc
źródło