Git dưới cửa sổ: MSYS hay Cygwin?


80

Tôi dự định chuyển các dự án của mình sang git và hiện tôi đang tự hỏi lựa chọn nào là tốt nhất và / hoặc ổn định nhất trong windows.

Từ những gì tôi thu thập được, về cơ bản tôi có 2,5 lựa chọn:

  1. MSYSgit
  2. git theo Cygwin
  3. (hay còn gọi là 2.5) MSYSgit từ dấu nhắc Cygwin (cho rằng git Cygwin đã được cài đặt).

Lưu ý: Bản thân IMO Cygwin đã là một điểm cộng lớn vì bạn có thể có quyền truy cập vào khá nhiều công cụ dòng lệnh * nix, như khi với MSYSgit bash, bạn chỉ có quyền truy cập vào một tập hợp con khá nhỏ của các công cụ này.

Với điều đó, bạn sẽ đề xuất lựa chọn nào?

Câu trả lời:


60

Chỉnh sửa (2 năm sau: tháng 10 năm 2014)

Johannes Schindelin vừa giải thích (tháng 10 năm 2014) rằng msysgit bị loại bỏ dần :

bây giờ chúng tôi có một Git nhẹ cho Windows SDK - về cơ bản là một hệ thống MinGW / MSys tiêu chuẩn được quản lý thông qua trình quản lý gói mingw-get.

Chúng tôi quyết định loại bỏ tên "msysGit" (cũng như tổ chức GitHub cùng tên ) và làm việc trên Git dành cho Windows (với tổ chức GitHub tương ứng) và sử dụng tên "Git cho Windows" cho trình cài đặt nhằm mục đích tại "người dùng cuối" và "Git cho Windows SDK" cho môi trường phát triển nhắm mục tiêu Git cho nhà phát triển Windows).


Chỉnh sửa (3 năm sau: tháng 4 năm 2012)

MsysGit (hiện có trên GitHub ) là cách tốt nhất nếu bạn muốn bắt đầu nhanh gọn nhẹ trong thế giới Git: giải nén kho lưu trữ, khởi chạy git-cmd.bathoặc git-bash.batbạn đã hoàn tất.
Bản phát hành mới nhất của nó (1.7.10, tháng 4 năm 2012) hiện bao gồm hỗ trợ cho UTF-8 , cũng được bao gồm trong GitExtension . Đừng quên đặt của bạn autocrlfthành false .

Nếu bạn thực sự thiếu tất cả các lệnh unix khác không phải gói với msysgit, chỉ cần tải xuống bản phát hành của GoW (Gnu trên Windows) , được đặt tên là "Giải pháp thay thế nhẹ cho Cygwin".
Ý tôi là: 130 lệnh unix s ...

Cygwin chỉ nên là một giải pháp dự phòng cho một số trường hợp nhất định, như tốc độ truyền của các kho lưu trữ Git lớn , như được đề cập bên dưới bởi incrementor trong câu trả lời của mình .


Tháng 6 năm 2012: nếu bạn muốn tương tác với GitHub , bây giờ bạn có http://windows.github.com (xem thêm " Thiết kế GitHub cho Windows ").
Nó không chỉ sẽ định cấu hình các khóa ssh cho bạn (và thêm khóa công khai đã tạo vào hồ sơ GitHub của bạn) mà còn cài đặt ... MsysGit cho tất cả các thao tác git.


Câu trả lời gốc (tháng 4 năm 2009)

Tôi không gặp vấn đề gì với phiên bản MsysGit mới nhất:
Tôi sử dụng tùy chọn 2 , nghĩa là tôi chỉ thêm thư mục git \ bin vào biến môi trường PATH, nhưng không ghi đè một số công cụ windows tích hợp sẵn.

Tôi đã quản lý để xác định các công cụ bên ngoài như Notepad ++WinMerge (hoặc DiffMerge)

Tôi đã chạy thành công các tập lệnh như svn2git vì từ MsysGit1.6.2 +, nó bao gồm git svnlệnh ''.

Và cuối cùng tôi mong đợi MsysGit1.6.2.3 vì nó sẽ bao gồm git filter-branchlệnh cuối cùng ' ' ! (một phiên bản chậm của nhánh bộ lọc, nhưng vẫn còn).

Đối với lệnh Unix, tôi thích cài đặt gói coreutils GnuWin32 và chỉ sử dụng chúng khi tôi cần.

Vì vậy, nhìn chung, tôi không sử dụng lớp Cygwin và đã quản lý để chạy Git rất tốt trong phiên bản MsysGit dựa trên Windows của nó.


Tôi cũng sử dụng p4merge, điều này khá tuyệt. Tôi đã đọc rằng có vấn đề với tên tệp git & unicode.
Benjol,

Cảm ơn bạn đã liên kết đến câu hỏi cài đặt core.editor. (Tôi đã cố gắng sử dụng Notepad ++ với các công tắc dòng lệnh như -nosession và -multiInst)
mbx

Câu trả lời này không thực sự trả lời tại sao người ta sử dụng cái này thay cho cái kia. Có câu trả lời tốt hơn dưới IMO
Sebastien Martin

@SebastienMartin bạn nên đề cập đến OP (Joce) trong trường hợp đó. Nếu không, anh ta sẽ không được thông báo về câu trả lời tốt hơn mà anh ta nên chọn.
VonC

@SebastienMartin Tôi đã cập nhật câu trả lời cũ này với nhiều thông tin mới nhất.
VonC

15

Đúng. Câu hỏi cũ. Câu trả lời mới:

Chúng tôi đã sử dụng MSYSgit khoảng 2 năm nay trong một đợt triển khai lớn. Tốc độ truyền từ một máy chủ lưu trữ git cục bộ đã được giới hạn dưới 5 MiB / s. Điều tra trước đó về vấn đề đã chỉ ra rằng vấn đề xảy ra với các nhà phát triển MSYS trên Windows XP và Windows 7 giới hạn kết nối bảo mật từ dấu nhắc lệnh / bash shell. Trên thực tế, điều này dường như không phải là vấn đề.

Tôi đã phát hiện ra bài đăng trên blog của Darrell Mozingo và đã kiểm tra bản sao của một repo lớn (nhiều GiB) chỉ sử dụng bản cài đặt Cygwin. Tốc độ truyền trong khoảng 30 MiB / s. Vấn đề là MSYSgit sử dụng tệp nhị phân OpenSSH cổ từ năm 2007.

Cuối cùng, cho đến khi điều đó được khắc phục, bây giờ tôi khuyên bạn nên chuyển sang Cygwin (mặc dù phiên bản git có hơi trễ). Tôi cũng thấy Cygwin ổn định hơn và ít có khả năng perl hết bộ nhớ hơn.


Dường như MinGW đang sử dụng OpenSSH 5.4 đó là từ năm 2010
Steven Penny

9

Tôi đã thử sử dụng cả hai phiên bản MSYS và Cygwin của git, và thành thật mà nói, tôi không thấy trải nghiệm nào đặc biệt tốt. Tôi không nghĩ rằng git đã thực sự sẵn sàng cho Windows.

Điều đó đang được nói, một vấn đề mà tôi đã tìm thấy với phiên bản MSYS là nó sẽ chuyển đổi phần cuối dòng trên các tệp (không phải nhị phân) của bạn từ kiểu UNIX (nguồn cấp dữ liệu dòng) sang kiểu DOS (xuống dòng / dòng-nguồn cấp dữ liệu). Bạn có thể coi đây là một lỗi hoặc một tính năng, nhưng không có cách nào để thay đổi hành vi mà tôi có thể tìm thấy. (CHỈNH SỬA: Đặt biến cấu hình core.autocrlfthành false. Cảm ơn Brian.)

OTOH, phiên bản MSYS của git có một số chức năng GUI không có trong phiên bản cygwin trừ khi bạn muốn cài đặt và chạy toàn bộ máy chủ X. (Cảm ơn Joce đã xác nhận điều này.)

Ấn tượng của tôi là phiên bản MSYS phổ biến hơn, mặc dù điều đó có thể là do bạn không cần cài đặt hệ sinh thái cygwin để sử dụng nó. (Và tôi đồng ý, cygwin cực kỳ hữu ích.)

Cá nhân tôi sẽ chọn Bazaar hoặc Mercurial , cả hai đều có hỗ trợ tốt hơn cho windows IMO.


3
Bazaar cũng là giải pháp của tôi cho câu hỏi về Git trên Windows. Heh.
Instance Hunter

9
Bạn có thể tắt bản dịch kết thúc dòng. Bạn chỉ cần đặt core.autocrlf thành false.
Brian Campbell

1
Chúng tôi hiện đang kiểm tra các tùy chọn của mình để chọn DCVS. Mercurial có trong danh sách. Tuy nhiên, chi phí phân nhánh, đặc biệt là đối với các dự án rất lớn, là khá thấp. Phiên bản Cygwin đi kèm với giao diện người dùng GUI (với chi phí chạy máy chủ X). Tuy nhiên, tôi không hoàn toàn chắc chắn về giá trị của nó.
joce

3
Tôi đang sử dụng phiên bản msys và không gặp bất kỳ sự cố nào.
Ikke

2
Tôi nghĩ rằng phiên bản msys mới nhất yêu cầu bạn định cấu hình cách xử lý phần cuối dòng khi bạn cài đặt nó.
Ken Liu,

7

Cả Cygwin và Msys Git đều hoạt động khá tốt cho các trường hợp sử dụng thông thường. Nếu bạn muốn sử dụng các script như git-svn, thì Cygwin là lựa chọn tốt hơn. Là một người dùng Windows cũ cuối cùng đã chuyển sang Linux, tôi chắc chắn có thể nói rằng Cygwin là một lợi ích tuyệt vời và đáng để sở hữu.

Tuy nhiên, bối cảnh là quan trọng; những dự án này là gì? Chúng được sử dụng bởi ai? Vân vân.


2
Chúng ta đang nói về một dự án khá lớn (32K + tệp nguồn) được phát triển bởi một nhóm khá nhỏ (~ 10 progs). Không phải tất cả chúng đều thành thạo môi trường w / * nix, nhưng sự đơn giản của git để sử dụng hàng ngày có vẻ đầy hứa hẹn. Chúng tôi cũng có kế hoạch sử dụng phân nhánh rất nhiều ví dụ: Một danh sách thay đổi P4 <=> Một nhánh git. Vì lý do đó, git thú vị hơn nhiều so với Hg chẳng hạn. Nỗi sợ của tôi trong Cygwin so với MSYS là phiên bản Cygwin không cập nhật như phiên bản MSYS.
joce

6

Tôi cũng đã thử nghiệm cả hai thế giới (CygWin và MSysgit), kinh nghiệm của tôi cũng là có một số thiếu sót trong bash MSysgit. Không thể chạy git stash thành công trong khi Cygwin xử lý nó một cách duyên dáng trên cùng một git repo.

Tuy nhiên, chưa có phân tích sâu nào được thực hiện ...


4

Tôi hiện đang sử dụng Msysgit cùng với TortoiseGit.

Giao diện người dùng MsysGit không thực sự theo ý thích của tôi vì vậy tôi sử dụng một công cụ quen thuộc như TortoiseGit và khi làm việc trên dòng lệnh (hầu hết thời gian), tôi sử dụng nhị phân git từ Msysgit


3

Tôi muốn gửi tin nhắn msysgit. Đặc biệt nếu nó được sử dụng với Git Extensions : nó cung cấp cách dễ dàng để cấu hình môi trường: các công cụ biên tập / khác biệt / hợp nhất và cho phép thực hiện các thao tác git nâng cao từ giao diện người dùng.


1

Tôi đã gặp phải lỗi nghiêm trọng trong quá trình triển khai cygwin của MSys: một số lệnh, đặc biệt là rebase, khá dễ bị lỗi. Cygwin's ổn định hơn nhiều đối với tôi.

Điều đó nói rằng, nó đã được một tháng trước, có thể đã được cải thiện kể từ đó.


3
"Cygwin của MSys"? ý bạn không phải là MSys's Git?
joce

2
@Alex Gontmakher Có lẽ nó ổn định hơn nhưng nó cũng chết chậm. Xem bài đăng này: stackoverflow.com/questions/6724471/…
WinWin

1

Tôi đã sử dụng cả Cygwin Git và Msysgit với Windows. Tôi sẽ đề xuất sử dụng Cygwin + Git. Cygwin 1.7 (hiện đang ở phiên bản beta) giải quyết một sắc thái chính (ít nhất là đối với tôi) khi sử dụng git gui và gitk. Các phiên bản trước của Cygwin thường mở 10 giây cửa sổ cmd mỗi khi tôi làm gì đó trong git-gui hoặc gitk. Điều này đã được giải quyết trong 1.7. Vỏ mạnh mẽ của Cygwin cũng mang lại rất nhiều tính năng của thiết bị đầu cuối linux.

Điều đó nói rằng, Msysgit đã phát triển khá nhiều và thực sự hữu ích trong Windows. Tôi đã phải đối mặt với một số vấn đề.

Vấn đề về quyền: một số tệp được tạo nguyên bản trong windows có chế độ 755 đã được chuyển đổi thành 644 trong khi sử dụng Msysgit. Điều này sẽ hiển thị dưới dạng tệp đã sửa đổi. Đăng ký sẽ khắc phục sự cố này.

CRLF: CRLF khó nắm bắt như thường lệ tạo ra các vấn đề trong Windows. Msysgit có thể báo cáo các tệp như đã được sửa đổi. Điều này có thể được khắc phục bằng cách chọn "Giữ nguyên phần cuối dòng" (quên văn bản chính xác) trong khi cài đặt Msysgit.

Daemon: Và vâng, tôi vẫn thấy khó thiết lập daemon git trong Msysgit.


1

Câu trả lời mới cho một câu hỏi cũ ...

Tôi đang sử dụng git 1.7.3 từ trình bao cmd của Windows 7 và nó hoạt động rất tốt. Tôi sử dụng kết hợp dòng lệnh git và git gui, và cả hai đều hoạt động tốt trong nhiều tháng. Chúng tôi đã gặp sự cố về dòng xuống dòng / nguồn cấp dữ liệu dòng, trầm trọng hơn khi chúng tôi thêm các nhà phát triển Mac vào nhóm, nhưng những vấn đề này đã được giải quyết với ...

core.autocrlf=true
core.safecrlf=false

Không phải nói rằng bạn không nên sử dụng trình bao * nix-y, chỉ là nó không cần thiết.


0

Tôi đặt trước CygWin vì tôi chỉ muốn git chứ không phải bất kỳ công cụ nào khác mà Cygwin muốn đưa vào. Thông thường, bạn muốn máy tính windows của mình hoạt động như máy tính windows và CygWin muốn làm một thứ gì đó hoàn toàn khác. Không thể sử dụng chức năng * nix chỉ dành cho các cú đá.

Vấn đề là, nếu tôi muốn làm việc với dòng lệnh * nix like, tôi sẽ chuyển sang máy Linux của mình và làm việc trên máy tính đó. Máy tính ảomáy tính để bàn từ xa ngày nay hoạt động như một sức hút và đủ khả năng truy cập cho các nhà phát triển.

Thực sự cần phải có một lý do chính đáng để bạn sử dụng CygWin. Nếu nó chỉ để sử dụng git, tôi khuyên bạn nên sử dụng MSysGit để thay thế, đó là sở thích của tôi. Nó hoạt động thực sự tốt với các công cụ gitk và git-gui đi kèm. Tôi đã làm việc trên cả Eclipse và Visual Studio bằng msysgit và nó hoạt động như một sự quyến rũ.

Điều duy nhất tôi chờ đợi bây giờ là một bản sao Tortoise hoạt động đầy đủ cho git .


Và nó xuất hiện ít nhất kể từ ngày 13/3/17 Cygwin ở mức 2,8,3 git và tôi đã gặp một chút vấn đề về Perl khi cập nhật. Git Bash MinGW ở mức 2,12.
Đánh dấu

0

Có một kịch bản hệ điều hành Windows mà bạn chỉ cần để sử dụng Git qua Cygwin: Đây là khi bạn muốn sử dụng Git chống lại một máy chủ SVN, mà hy vọng SVN phiên bản client cao hơn 1,5. Có tồn tại các móc cam kết trước SVN chặn cam kết khi không có đối số 'mergeinfo' - và đối số 'mergeinfo' chỉ được mặc định trong SVN kể từ phiên bản 1.5. Vấn đề với msysGit là nó được xây dựng dựa trên phiên bản SVN cũ hơn (1.4.6), vì vậy bạn không thể cam kết thành công trong trường hợp này. Nhưng có thể với Cygwin's Git, vì nó được xây dựng dựa trên các phiên bản SVN mới hơn.


0

Nếu bạn chỉ muốn thực hiện các hành động đơn giản như đẩy / kéo / phân nhánh, bạn có thể thử SourceTree từ Atlasian. Một giao diện người dùng rất đơn giản và rõ ràng cho lệnh Git. Tuy nhiên nó có ngắn ngủi sắp tới.

Nếu bạn cần sử dụng công cụ git dòng lệnh, chỉ cần tải công cụ Git for windows. Nó phải là đủ, trừ khi bạn bắt đầu tìm kiếm kịch bản bash.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.