Apa itu Git Bash untuk Windows?

59

Saya dengan senang hati menggunakan Git dan Git Bash dari https://git-scm.com/ . Ada halaman dengan informasi lebih lanjut di sini: https://git-for-windows.github.io/ .

Kemarin saya mengalami masalah dengan rsync, dan saya mulai menggali lebih dalam ke Git Bash untuk Windows. Saya menyadari bahwa saya bahkan tidak yakin dengan nama program Bash, karena hanya dibundel dengan unduhan git-scm. Saya menyebutnya Git Bash untuk Windows, yang tampaknya masuk akal.

Dalam melihat ke "Apa Git Bash" Saya membaca tentang Cygwin dan berbeda hal yang disebut mysys2 , yang tampaknya berhubungan dengan mysysGit, dan aku melihat referensi ke MinGW. Tapi, kemudian saya melihat di FAQ bahwa mintty adalah terminal default untuk Git Bash.

Tampaknya aplikasi Bash sebenarnya adalah kumpulan barang-barang lain yang dikuratori secara khusus (kebanyakan terdaftar di atas) yang tersedia secara independen.

Pada dasarnya, saya ingin tahu apa dasar yang membuat perintah * nix seperti ssh scp cat lsbekerja di Git Bash untuk Windows?

(Saya pikir jawaban yang baik akan membantu seseorang memahami, secara garis besar, bagaimana komponen-komponen ini cocok bersama dan memahami kata-kata yang tepat untuk komponen, tetapi saya tidak ingin memecah format SO pertanyaan / jawaban.)

geneorama
sumber
Menemukan jawaban yang sangat baik di sini: Apa arti sebenarnya dari Git Bash?
geneorama
1
Saya pikir nama resmi / hal untuk google adalah "git bash". Membantu membuatnya dalam tanda kutip karena kedua kata bermakna secara mandiri.
geneorama
Beberapa diskusi bagus tentang Reddit di sini dan di sini (mulai 2017). Mereka bahkan menjawab rsyncpertanyaan awal saya !!
geneorama

Jawaban:

69

Ringkasan

Anda benar, Git Bash untuk Windows tidak hanya bashdikompilasi untuk Windows. Ini paket yang berisi bash(yang merupakan baris perintah shell ) dan koleksi lainnya, yang terpisah * nix utilitas seperti ssh, scp, cat, finddan lain-lain (yang Anda jalankan menggunakan shell), dikompilasi untuk Windows, dan terminal antarmuka baris perintah baru jendela yang disebut mintty.

Pendeknya

Di Windows Anda dapat menjalankan perintah like ipconfig /allatau format G:using cmd.exe. Perintah-perintah ini adalah file yang sebenarnya dapat dieksekusi di bawah C:\Windows\system32, disimpan sebagai ipconfig.exedan format.comfile. cmd.exeterpisah dari keduanya dan memuat dan menjalankannya atas permintaan pengguna.

ssh, scp, cat, findDijalankan menggunakan bashdengan cara yang persis sama. Mereka biasanya disimpan di bawah /usr/bindaripada di C:\Windows\system32dalam sistem * nix, karena Windows dan * nix memiliki struktur file sistem mereka diatur secara berbeda.

Dalam kasus Git Bash untuk Windows, program ini terletak di folder instalasi Git:, C:\Program Files\Git\usr\binyang juga dapat ditemukan di lingkungan Linux yang ditiru di bawah /usr/bin.

Sama seperti hanya bisa berjalan cmd.exedi * nix tidak memungkinkan Anda untuk melakukan banyak tanpa utilitas sistem lain, hanya bisa menjalankan Bash pada Windows juga tidak terlalu berguna. Ini berarti bahwa semua perintah tambahan ini harus digabungkan bersama dengan Bash untuk membuat paket perangkat lunak yang dapat digunakan.

Detail: Aplikasi POSIX pada Windows

Biasanya perintah-perintah tambahan akan ditemukan pada sistem * nix dan bukan pada Windows, karena mereka telah diprogram terhadap API pemrograman POSIX (yang digunakan * nix), dan bukan Win32 API (yang digunakan Windows). Dokumentasi POSIX API tersedia secara terbuka, sehingga beberapa orang telah memindahkannya ke sistem lain, termasuk Windows. Implementasi POSIX APIs / libraries disediakan oleh Cygwindan MSYS.

Ini mirip dengan apa yang dilakukan proyek Wine , tetapi ia mengubah POSIX-> Windows daripada Windows-> POSIX seperti Wine.

mintty

minttydimasukkan karena cmd.exe, jendela baris perintah Windows default, tidak memiliki beberapa fitur penting yang biasanya tersedia pada kebanyakan sistem * nix. Dalam kebanyakan kasus, minttyini adalah pilihan yang lebih baik untuk menjalankan perintah (tentunya untuk utilitas yang datang dengan paket Git Bash untuk Windows), tetapi kadang-kadang aplikasi sistem Windows dapat bekerja dengan lebih baik cmd.exe.

Pabru
sumber
1
Ternyata sebagian besar pertanyaan saya dijawab dalam FAQ proyek: github.com/git-for-windows/git/wiki/FAQ dan saya dapat menemukan info lebih spesifik di grup google group.google.com/forum/#! forum / git-for-windows .
geneorama
@geneorama Seharusnya tidak menjadi masalah untuk menerima jawaban ini jika memang benar, informatif dan bermanfaat.
walen
1
@geneorama Mengisi hal itu mungkin niat Anda, tetapi itu bukan pertanyaan yang Anda ajukan. Posting Anda berjudul "Apa itu Git Bash untuk Windows?" , dan satu-satunya pertanyaan yang ada di tubuhnya adalah "Saya ingin tahu apa dasar yang membuat perintah * nix ssh scp cat lsberfungsi di Git Bash untuk Windows?" . Posting Pabru menjawab kedua pertanyaan dengan cukup baik dan merupakan jawaban yang benar bagi siapa pun yang mungkin memiliki pertanyaan yang sama (seperti yang dinyatakan), jadi dengan menerimanya Anda membantu pengguna lain. Sudahkah Anda mencoba memposting pertanyaan baru untuk rsyncmasalah ini?
walen
4
@walen memposting pertanyaan di SO dan situs terkait sangat tidak menyenangkan sehingga saya ragu saya akan mengirim lebih banyak pertanyaan. Pertanyaan ini sebenarnya adalah sebuah tes, dan itu mengkonfirmasi perasaan saya. Dalam upaya saya untuk menjaga agar pertanyaan tetap ringkas dan mendokumentasikan penelitian saya (dan saya menghabiskan waktu sehari penuh untuk meneliti), saya kira saya mengabaikan pertanyaan yang sebenarnya. Ketika saya mengedit dengan hati-hati, orang-orang tampaknya menganggap singkatnya penelitian. Jika saya membuat pertanyaan terlalu verbal itu akan diabaikan. Tidak peduli apa, pertanyaan itu dikritik (beberapa komentar kasar telah dihapus). Bahkan pertanyaan-pertanyaan "terkenal" saya sangat tidak disukai pada awalnya.
geneorama
1
@geneorama Jika ini menghibur Anda, pertanyaan Anda membantu saya mempelajari lebih lanjut tentang git bash, bahkan sebelum membaca jawabannya. Tapi aku mengerti maksudmu.
walen
4

Latar Belakang

Saya adalah OP. Saya awalnya hanya ingin tahu nama formal untuk hal yang saya gunakan.

Sekarang saya pikir namanya "Git Bash for Windows". Sayangnya jawaban lengkapnya rumit karena hal ini sebenarnya banyak hal.

Jawaban teratas dari 2016 pada awalnya tidak membantu saya, tetapi telah banyak diedit dan semakin bermanfaat. Tetap saja, ia melewatkan beberapa pertanyaan awal saya.

Awal mula: msysgit

Sebenarnya, awalnya mungkin MSYS, tapi sungguh MSYS2. Istilah "msysgit" adalah istilah yang baik untuk melakukan pencarian untuk mencari tahu apa yang terjadi ketika XYZ salah; hal-hal seperti "di mana di @ * #! Apakah semua pengaturan autocrlf disimpan?!?!?!?"

README ( https://github.com/msysgit/msysgit ) dalam proyek msysgit menjelaskan hubungan antara komponen-komponen:

Hubungan antara msysGit dan Git untuk Windows

Git untuk Windows adalah paket perangkat lunak yang menginstal lingkungan minimal untuk menjalankan Git di Windows. Muncul dengan Bash (shell tipe Unix), dengan penerjemah Perl dan dengan eksekusi Git dan dependensinya.

Di sisi lain, msysGit adalah paket perangkat lunak yang menginstal lingkungan build yang dapat membangun Git untuk Windows. Cara termudah adalah menginstalnya melalui installer bersih .

Perbedaan antara MSYS dan MinGW

Tujuan proyek MinGW adalah untuk menyediakan cara untuk mengkompilasi binari Windows asli tanpa lapisan POSIX menggunakan GNU C Compiler.

Namun, setidaknya Bash membutuhkan lapisan POSIX (terutama karena tidak adanya fork()panggilan pada Windows). Oleh karena itu, MSYS ( sistem minimal ) dilemparkan ke dalam, menawarkan sistem minimal yang diperlukan untuk menawarkan fungsionalitas Bash (dan Perl) di Windows.

Akibatnya, MSYS dikirimkan dengan lapisan POSIX (berdasarkan versi lama Cygwin) yang hanya digunakan oleh Bash dan Perl, tetapi tidak oleh apa pun yang dikompilasi dalam lingkungan itu.

BTW, kalau-kalau README penuh akan dihapus, saya menyalinnya ke intisari .

Jendela terminal: mintty

Bagian lain dari Git Bash untuk windows adalah baris perintah Windows yang sebenarnya, mintty. Syukurlah itu ada, tapi itu bukan sesuatu yang saya butuhkan untuk google.

Referensi untuk MSYS2

Wiki mereka adalah harta karun rincian tentang lingkungan MSYS2: https://github.com/msys2/msys2/wiki

Dalam pengantar, bagian ini paling relevan dengan pertanyaan awal saya:

MSYS2 terdiri dari tiga subsistem dan repositori paket yang sesuai mereka, msys2, mingw32, dan mingw64.

Diskusi ini juga sangat membantu: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

geneorama
sumber
1
"Akibatnya, MSys mengirim dengan lapisan POSIX ( berdasarkan versi lama Cygwin ) ..." - ini membantu saya menyimpulkan bahwa menginstal git pada Cygwin membuat 'Git Bash untuk Windows' menjadi berlebihan sehingga saya dapat menghapus instalannya.
Daniel Sokolowski