Git Bash cho Windows là gì?


61

Tôi đã rất vui khi sử dụng Git và Git Bash từ https://git-scm.com/ . Có một trang với nhiều thông tin hơn ở đây: https://git-for-windows.github.io/ .

Hôm qua tôi gặp phải một vấn đề rsyncvà tôi bắt đầu tìm hiểu sâu hơn về Git Bash cho Windows. Tôi nhận ra rằng tôi thậm chí không chắc chắn về tên của chương trình Bash, bởi vì nó chỉ đi kèm với tải xuống git-scm. Tôi gọi nó là Git Bash cho Windows, có vẻ hợp lý.

Khi xem xét "Git Bash là gì" tôi đã đọc về Cygwin và một điều khác gọi là mysys2 , dường như có liên quan đến mysysGit, và tôi đã thấy các tài liệu tham khảo MinGW. Nhưng, sau đó tôi đã thấy trong FAQ rằng mintty là thiết bị đầu cuối mặc định cho Git Bash.

Có vẻ như ứng dụng Bash thực sự là một gói được quản lý đặc biệt của những thứ khác (chủ yếu được liệt kê ở trên) có sẵn độc lập.

Về cơ bản, tôi muốn biết đâu là cơ sở tạo ra các lệnh * nix như ssh scp cat lshoạt động trong Git Bash cho Windows?

.


Tìm thấy một câu trả lời rất hay ở đây: Ý nghĩa chính xác của Git Bash là gì?
genorama

1
Tôi nghĩ tên / thứ chính thức của google là "git bash". Giúp có nó trong dấu ngoặc kép vì cả hai từ đều có ý nghĩa độc lập.
genorama

Một số thảo luận tốt về Reddit tại đâytại đây (từ năm 2017). Họ thậm chí còn giải quyết rsynccâu hỏi ban đầu của tôi !!
genorama

Câu trả lời:


72

Tóm lược

Bạn đã đúng, Git Bash cho Windows không chỉ bashđược biên dịch cho Windows. Đó là gói chứa bash(mà là một tiện ích dòng lệnh ) và một bộ sưu tập khác, tiện ích riêng biệt * nix như ssh, scp, cat, findvà những người khác (mà bạn chạy bằng cách sử dụng vỏ), biên soạn dành cho Windows, và một giao diện dòng lệnh terminal mới cửa sổ gọi mintty.

Tóm lại

Trên Windows, bạn có thể chạy các lệnh như ipconfig /allhoặc format G:sử dụng cmd.exe. Các lệnh này là các tệp thực thi thực tế bên dưới C:\Windows\system32, được lưu trữ dưới dạng ipconfig.exeformat.comtệp. cmd.exetách biệt với cả hai và tải và chạy chúng theo yêu cầu của người dùng.

ssh, scp, cat, findĐang chạy sử dụng bashchính xác cùng một cách. Chúng thường được lưu trữ bên dưới /usr/binchứ không phải trong C:\Windows\system32các hệ thống * nix, vì Windows và * nix có cấu trúc tệp hệ thống của chúng được tổ chức khác nhau.

Trong trường hợp Git Bash cho Windows, các chương trình này được đặt trong thư mục cài đặt Git : C:\Program Files\Git\usr\bin, cũng có thể được tìm thấy trong môi trường Linux giả lập bên dưới /usr/bin.

Giống như việc chỉ có thể chạy cmd.exetrên * nix không cho phép bạn làm được nhiều việc mà không cần các tiện ích hệ thống khác, chỉ có thể chạy Bash trên Windows cũng không hữu ích lắm. Điều này có nghĩa là tất cả các lệnh bổ sung này phải được gói cùng với Bash để tạo ra gói phần mềm có thể sử dụng được.

Chi tiết: Ứng dụng POSIX trên Windows

Thông thường, các lệnh bổ sung đó sẽ được tìm thấy trên các hệ thống * nix chứ không phải trên Windows, vì chúng đã được lập trình dựa trên API lập trình POSIX (đó là những gì * nix sử dụng), chứ không phải API Win32 (là những gì Windows sử dụng). Tài liệu API POSIX có sẵn công khai, vì vậy một số người đã chuyển nó sang các hệ thống khác, bao gồm cả Windows. Windows triển khai các API / thư viện POSIX được cung cấp bởi CygwinMSYS.

Điều này tương tự như những gì mà dự án Wine làm, nhưng nó chuyển đổi POSIX-> Windows chứ không phải Windows-> POSIX như Wine.

bạc hà

minttyđược bao gồm bởi vì cmd.exe, cửa sổ dòng lệnh mặc định của Windows, thiếu một số tính năng quan trọng thường có trên hầu hết các hệ thống * nix. Trong hầu hết các trường hợp, minttylà lựa chọn tốt hơn để chạy các lệnh (chắc chắn cho các tiện ích đi kèm với gói Git Bash cho Windows), nhưng đôi khi một ứng dụng hệ thống Windows có thể hoạt động tốt hơn cmd.exe.


1
Hóa ra hầu hết các câu hỏi của tôi đều được trả lời trong Câu hỏi thường gặp của dự án: github.com/git-for-windows/git/wiki/FAQ và tôi có thể tìm thấy thông tin cụ thể hơn trong các nhóm google.google.com/forum/#! diễn đàn / git-cho-windows .
genorama

@geneorama Đó không phải là một vấn đề để chấp nhận câu trả lời này nếu nó thực sự chính xác, nhiều thông tin và hữu ích.
walen

1
@geneorama Điền vào chỗ trống có thể là ý định của bạn, nhưng đó không phải là câu hỏi bạn đưa ra. Bài đăng của bạn có tiêu đề "Git Bash cho Windows là gì?" và câu hỏi duy nhất hiện diện trong cơ thể của nó là "Tôi muốn biết đâu là cơ sở tạo ra các lệnh * nix như ssh scp cat lshoạt động trong Git Bash cho Windows?" . Bài đăng của Clausru trả lời cả hai câu hỏi khá độc đáo và là câu trả lời đúng cho bất kỳ ai có thể có cùng câu hỏi (như đã nêu), vì vậy bằng cách chấp nhận nó, bạn đang giúp đỡ những người dùng khác. Bạn đã thử đăng một câu hỏi mới cho rsyncvấn đề này chưa?
walen

4
@walen đăng câu hỏi trên SO và các trang web liên quan thật khó chịu đến nỗi tôi nghi ngờ mình sẽ đăng thêm câu hỏi. Đây thực sự là một bài kiểm tra, và nó đã xác nhận cảm xúc của tôi. Trong nỗ lực của tôi để giữ cho câu hỏi ngắn gọn và ghi lại nghiên cứu của tôi (và tôi đã dành cả ngày để nghiên cứu), tôi đoán rằng tôi đã bỏ qua câu hỏi thực tế. Khi tôi chỉnh sửa cẩn thận, mọi người dường như coi sự ngắn gọn là thiếu nghiên cứu. Nếu tôi làm cho câu hỏi quá dài dòng thì nó sẽ bị bỏ qua. Không có vấn đề gì, câu hỏi bị chỉ trích (một số bình luận thô lỗ đã bị xóa). Ngay cả những câu hỏi "nổi tiếng" của tôi lúc đầu cũng bị đánh giá thấp.
genorama

1
@geneorama Nếu có bất kỳ sự an ủi nào với bạn, câu hỏi của bạn đã giúp tôi tìm hiểu thêm về git bash, trước cả khi đọc câu trả lời. Nhưng tôi hiểu ý của bạn.
walen

4

Lý lịch

Tôi là OP. Ban đầu tôi chỉ muốn biết tên chính thức cho thứ mà tôi đang sử dụng.

Bây giờ tôi nghĩ tên là "Git Bash cho Windows". Thật không may, câu trả lời đầy đủ là phức tạp bởi vì điều này thực sự là rất nhiều thứ.

Câu trả lời hàng đầu từ năm 2016 ban đầu không hữu ích cho tôi, nhưng nó đã được chỉnh sửa rất nhiều và ngày càng hữu ích hơn. Tuy nhiên, nó bỏ lỡ một số câu hỏi ban đầu của tôi.

Sự bắt đầu: msysgit

Trên thực tế, sự khởi đầu có lẽ MSYS, nhưng thực sự MSYS2. Thuật ngữ "msysgit" là một thuật ngữ tốt để đưa vào tìm kiếm để tìm hiểu điều gì đang xảy ra khi XYZ gặp sự cố; những thứ như "trong đó @ * #! tất cả các cài đặt autocrlf được lưu trữ?!?!?!?"

README ( https://github.com/msysgit/msysgit ) trong dự án msysgit giải thích mối quan hệ giữa các thành phần:

Mối quan hệ giữa msysGitGit cho Windows

Git cho Windows là gói phần mềm cài đặt một môi trường tối thiểu để chạy Git trên Windows. Nó đi kèm với Bash (shell kiểu Unix), với trình thông dịch Perl và với tệp thực thi Git và các phụ thuộc của nó.

Mặt khác, msysGit là gói phần mềm cài đặt môi trường xây dựng có thể xây dựng Git cho Windows. Cách dễ nhất là cài đặt nó thông qua trình cài đặt mạng .

Sự khác biệt giữa MSYS và MinGW

Các dự án MinGW Mục Tiêu 's là để cung cấp một cách để biên dịch mã nhị phân bản Windows không có lớp POSIX sử dụng GNU C Compiler.

Tuy nhiên, ít nhất Bash cần một lớp POSIX (đáng chú ý nhất là do không có fork()cuộc gọi trên Windows). Do đó, MSYS ( hệ thống tối thiểu ) được đưa vào, cung cấp hệ thống tối thiểu cần thiết để cung cấp chức năng Bash (và Perl) trên Windows.

Do đó, MSYS vận chuyển với lớp POSIX (dựa trên phiên bản cũ của Cygwin) chỉ được sử dụng bởi Bash và Perl, nhưng không được biên dịch trong môi trường đó.

BTW, chỉ trong trường hợp README đầy đủ bị xóa, tôi đã sao chép nó vào một ý chính .

Cửa sổ đầu cuối: mintty

Phần khác của Git Bash cho windows là dòng lệnh Windows thực tế, mintty. Cảm ơn chúa vì nó tồn tại, nhưng đó không phải là thứ tôi cần để google.

Tài liệu tham khảo cho MSYS2

Wiki của họ là một kho tàng chi tiết thực sự về môi trường MSYS2: https://github.com/msys2/msys2/wiki

Trong phần giới thiệu, phần này phù hợp nhất với câu hỏi ban đầu của tôi:

MSYS2 bao gồm ba hệ thống con và kho gói tương ứng của họ, msys2, mingw32, và mingw64.

Thảo luận này cũng rất hữu ích: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e


1
"Do đó, MSys vận chuyển với lớp POSIX ( dựa trên phiên bản cũ của Cygwin ) ..." - điều này giúp tôi kết luận rằng việc cài đặt git trên Cygwin khiến 'Git Bash cho Windows trở nên dư thừa nên tôi có thể gỡ cài đặt nó.
Daniel Sokolowski
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.