อย่างไรก็ตาม Git Bash สำหรับ Windows คืออะไร


61

ฉันได้รับการอย่างมีความสุขโดยใช้ Git Git และทุบตีจากhttps://git-scm.com/ มีหน้ามีข้อมูลเพิ่มเติมที่นี่: https://git-for-windows.github.io/

เมื่อวานนี้ฉันพบปัญหาrsyncและฉันเริ่มขุดลึกลงไปใน Git Bash สำหรับ Windows ฉันรู้ว่าฉันยังไม่แน่ใจในชื่อของโปรแกรม Bash เพราะมันเพิ่งมาพร้อมกับการดาวน์โหลด git-scm ฉันเรียกมันว่า Git Bash สำหรับ Windows ซึ่งดูสมเหตุสมผล

ในการมองเข้าไปใน "แจกทุบตีอะไรคือ" ฉันอ่านเกี่ยวกับCygwinและแตกต่างกันสิ่งที่เรียกว่าmysys2ซึ่งดูเหมือนว่าจะเกี่ยวข้องกับการและฉันเห็นการอ้างอิงถึงmysysGit MinGWแต่แล้วผมเห็นในคำถามที่พบบ่อยminttyเป็นขั้วเริ่มต้นสำหรับ Git Bash

ดูเหมือนว่าแอปพลิเคชั่น Bash นั้นเป็นกลุ่มที่ได้รับการดูแลเป็นพิเศษจากสิ่งอื่น ๆ

ฉันอยากทราบว่าอะไรคือพื้นฐานที่ทำให้คำสั่ง * nix ชอบssh scp cat lsทำงานใน Git Bash สำหรับ Windows

(ฉันคิดว่าคำตอบที่ดีจะช่วยให้ใครบางคนเข้าใจในจังหวะกว้างว่าองค์ประกอบเหล่านี้เข้ากันได้อย่างไรและเข้าใจคำศัพท์ที่เหมาะสมสำหรับส่วนประกอบ แต่ฉันไม่ต้องการที่จะทำลายรูปแบบคำถาม / คำตอบ SO)



1
ฉันคิดว่าชื่ออย่างเป็นทางการของ google คือ "git bash" ช่วยให้มีการเสนอราคาเนื่องจากทั้งสองคำมีความหมายอย่างอิสระ
genorama

การสนทนาที่ดีเกี่ยวกับ Reddit ที่นี่และที่นี่ (จาก 2017) พวกเขายังrsyncตอบคำถามเดิมของฉัน!!
geneorama

คำตอบ:


72

สรุป

คุณถูกต้องGit Bash สำหรับ Windowsไม่ได้bashรวบรวมเพียงสำหรับ Windows มันเป็นแพคเกจที่มีbash(ซึ่งเป็นเปลือกบรรทัดคำสั่ง ) และคอลเลกชันของอื่น ๆ ที่แยกต่างหาก * สาธารณูปโภคระวังเหมือนssh, scp, cat, findและอื่น ๆ (ซึ่งคุณทำงานโดยใช้เปลือก) รวบรวมสำหรับ Windows และขั้วอินเตอร์เฟซบรรทัดคำสั่งใหม่ minttyหน้าต่างที่เรียกว่า

โดยสังเขป

ใน Windows คุณอาจเรียกใช้คำสั่งที่ชอบipconfig /allหรือใช้format G: cmd.exeคำสั่งเหล่านี้เป็นไฟล์เรียกใช้งานจริงภายใต้C:\Windows\system32จัดเก็บเป็นipconfig.exeและformat.comไฟล์ cmd.exeแยกจากทั้งสองและโหลดและเรียกใช้ตามคำขอของผู้ใช้

ssh, scp, cat, findจะดำเนินการใช้bashในทางเดียวกันว่า พวกเขามักจะจัดเก็บภายใต้/usr/binมากกว่าในC:\Windows\system32ระบบ * nix เพราะ Windows และ * nix มีโครงสร้างไฟล์ระบบของพวกเขาจัดระเบียบแตกต่างกัน

ในกรณีของ Git Bash สำหรับ Windows โปรแกรมเหล่านี้จะอยู่ในโฟลเดอร์ที่ติดตั้ง Git นี้ซึ่งยังสามารถพบได้ในสภาพแวดล้อมลินุกซ์ภายใต้การเทิดทูนC:\Program Files\Git\usr\bin/usr/bin

เช่นเดียวกับความสามารถในการรันcmd.exeบน * nix ไม่อนุญาตให้คุณทำอะไรมากมายโดยไม่ต้องมีระบบสาธารณูปโภคอื่น ๆ การใช้ Bash บน Windows ก็ไม่มีประโยชน์เช่นกัน ซึ่งหมายความว่าคำสั่งพิเศษเหล่านี้จะต้องรวมเข้ากับ Bash เพื่อสร้างชุดซอฟต์แวร์ที่ใช้งานได้

รายละเอียด: แอปพลิเคชัน POSIX บน Windows

โดยปกติคำสั่งพิเศษเหล่านั้นจะพบได้ในระบบ * nix และไม่ได้อยู่บน Windows เพราะพวกเขาได้รับการตั้งโปรแกรมให้กับ POSIX programming API (ซึ่งเป็นสิ่งที่ * nix ใช้) และไม่ใช่ Win32 APIs (ซึ่งเป็นสิ่งที่ Windows ใช้) เอกสาร POSIX API นั้นเปิดเผยอย่างเปิดเผยดังนั้นบางคนจึงย้ายระบบไปยังระบบอื่นรวมถึง Windows หน้าต่างการดำเนินงานของ POSIX APIs / ห้องสมุดที่ให้บริการโดยและCygwinMSYS

สิ่งนี้คล้ายกับที่โครงการไวน์ทำ แต่จะแปลง POSIX-> Windows แทนที่จะเป็น Windows-> POSIX เช่นเดียวกับที่ทำกับไวน์

mintty

minttyรวมอยู่เนื่องจากcmd.exeหน้าต่างบรรทัดคำสั่งเริ่มต้นของ Windows ขาดคุณสมบัติที่สำคัญบางประการซึ่งโดยปกติจะมีอยู่ในระบบ * nix ส่วนใหญ่ ในกรณีส่วนใหญ่minttyเป็นทางเลือกที่ดีกว่าสำหรับการใช้คำสั่ง (แน่นอนค่าสาธารณูปโภคที่มาพร้อมกับ Git Bash สำหรับแพคเกจ Windows) แต่บางครั้งการประยุกต์ใช้ระบบ Windows cmd.exeอาจทำงานได้ดีขึ้นด้วย


1
ปรากฎว่าคำถามส่วนใหญ่ของฉันได้รับคำตอบในคำถามที่พบบ่อยของโครงการ: github.com/git-for-windows/git/wiki/FAQและฉันสามารถค้นหาข้อมูลที่เฉพาะเจาะจงมากขึ้นในกลุ่ม google groups.google.com/forum/#! ฟอรั่ม
genorama

@geneorama ไม่น่าจะมีปัญหาในการยอมรับคำตอบนี้ถ้ามันถูกต้องมีข้อมูลและมีประโยชน์
walen

1
@geneorama การเติมช่องว่างนั้นอาจเป็นความตั้งใจของคุณ แต่นั่นไม่ใช่คำถามที่คุณทำ โพสต์ของคุณชื่อ"Git Bash สำหรับ Windows คืออะไร" และคำถามเดียวที่มีอยู่ในร่างกายคือ"ฉันต้องการทราบว่าอะไรคือพื้นฐานที่ทำให้คำสั่ง * nix ชอบssh scp cat lsทำงานใน Git Bash สำหรับ Windows" . โพสต์ของ Pabru ตอบคำถามทั้งสองเป็นอย่างดีและเป็นคำตอบที่ถูกต้องสำหรับทุกคนที่อาจมีคำถามเดียวกัน (ตามที่ระบุไว้) ดังนั้นโดยยอมรับว่าคุณกำลังช่วยเหลือผู้ใช้รายอื่น คุณลองโพสต์คำถามใหม่สำหรับrsyncปัญหานี้หรือไม่?
walen

4
@ วาเลนที่โพสต์คำถามบน SO และไซต์ที่เกี่ยวข้องนั้นไม่เป็นที่พอใจฉันสงสัยว่าฉันจะโพสต์คำถามเพิ่มเติมอีกครั้งนี่เป็นการทดสอบจริงและยืนยันความรู้สึกของฉัน ในความพยายามของฉันในการรักษาคำถามให้รัดกุมและจัดทำเอกสารงานวิจัยของฉัน (และฉันใช้เวลาค้นคว้าทั้งวัน) ฉันเดาว่าฉันทิ้งคำถามจริงไว้ เมื่อฉันแก้ไขอย่างระมัดระวังคนดูเหมือนจะใช้เวลาสั้น ๆ ที่ขาดการวิจัย ถ้าฉันทำคำถามด้วย verbose เกินไปก็จะถูกละเว้น ไม่ว่าอะไรจะเกิดขึ้นคำถามก็ถูกวิจารณ์ แม้แต่คำถาม "ที่มีชื่อเสียง" ของฉันก็ถูกลดระดับลงอย่างมากในตอนแรก
geneorama

1
@geneorama หากคุณเป็นคนปลอบใจคำถามของคุณก็ช่วยให้ฉันเรียนรู้เพิ่มเติมเกี่ยวกับ git bash ก่อนที่จะอ่านคำตอบ แต่ฉันเข้าใจความหมายของคุณ
walen

4

พื้นหลัง

ฉันเป็นผู้ดูแล ตอนแรกฉันอยากรู้ชื่อทางการของสิ่งนี้ที่ฉันใช้

ตอนนี้ฉันคิดว่าชื่อ "Git Bash สำหรับ Windows" น่าเสียดายที่คำตอบเต็มซับซ้อนเพราะสิ่งนี้จริง ๆ แล้วหลายสิ่ง

คำตอบยอดนิยมจากปี 2016 ไม่ได้เป็นประโยชน์สำหรับฉัน แต่มันได้รับการแก้ไขอย่างหนักและได้รับประโยชน์มากขึ้นเรื่อย ๆ ถึงกระนั้นก็ยังขาดคำถามเดิมของฉัน

การเริ่มต้น: msysgit

ที่จริงแล้วการเริ่มต้นอาจเป็นMSYSไปได้ แต่จริงๆMSYS2แล้ว คำว่า "msysgit" เป็นคำที่ดีในการค้นหาเพื่อค้นหาว่าเกิดอะไรขึ้นเมื่อ XYZ ผิดพลาด สิ่งต่าง ๆ เช่น "ที่ไหนใน @ * #! การตั้งค่า autocrlf ทั้งหมดถูกเก็บไว้หรือไม่?!?!?!?"

README ( https://github.com/msysgit/msysgit ) ในโครงการ msysgit อธิบายถึงความสัมพันธ์ระหว่างส่วนประกอบ:

ความสัมพันธ์ระหว่างmsysGitและGit สำหรับ Windows

Git สำหรับ Windowsเป็นชุดซอฟต์แวร์ที่ติดตั้งสภาพแวดล้อมที่น้อยที่สุดเพื่อเรียกใช้ Git บน Windows มันมาพร้อมกับ Bash (เชลล์ Unix-type) พร้อมล่าม Perl และปฏิบัติการ Git และการพึ่งพา

ในทางกลับกัน msysGit เป็นชุดซอฟต์แวร์ที่ติดตั้งสภาพแวดล้อมการสร้างที่สามารถสร้าง Git สำหรับ Windows วิธีที่ง่ายที่สุดคือการติดตั้งมันผ่านการติดตั้งสุทธิ

ความแตกต่างระหว่าง MSYS และ MinGW

โครงการ MinGWเป้าหมายคือการให้วิธีการในการรวบรวมไบนารีของ Windows พื้นเมืองที่มีชั้น POSIX ไม่ใช้ GNU C คอมไพเลอร์

อย่างไรก็ตามอย่างน้อย Bash ต้องการเลเยอร์ POSIX (ที่สะดุดตาที่สุดเนื่องจากไม่มีการfork()เรียกบน Windows) ดังนั้น MSYS ( ระบบขั้นต่ำ ) จะถูกส่งเข้ามาโดยนำเสนอระบบขั้นต่ำที่จำเป็นสำหรับการทำงานของ Bash (และ Perl) บน Windows

ดังนั้น MSYS มาพร้อมกับเลเยอร์ POSIX (อิงจาก Cygwin รุ่นเก่า) ที่ใช้โดย Bash และ Perl เท่านั้น แต่ไม่รวมถึงสิ่งใด ๆ ที่ถูกรวบรวมภายในสภาพแวดล้อมนั้น

BTW เพียงในกรณีที่ README เต็มรูปแบบได้รับการลบผมคัดลอกมามันกลายเป็นส่วนสำคัญ

หน้าต่างเทอร์มินัล: mintty

อีกส่วนหนึ่งของ Git Bash for windows คือบรรทัดคำสั่ง Windows ที่แท้จริงมินต์ ขอบคุณพระเจ้ามันมีอยู่แล้ว แต่มันไม่ใช่สิ่งที่ฉันต้อง google

การอ้างอิงสำหรับ MSYS2

วิกิของพวกเขาคือขุมสมบัติที่แท้จริงของรายละเอียดเกี่ยวกับสภาพแวดล้อม MSYS2: https://github.com/msys2/msys2/wiki

ในการแนะนำส่วนนี้มีความเกี่ยวข้องมากที่สุดกับคำถามเดิมของฉัน:

MSYS2 ประกอบด้วยสามระบบย่อยและสอดคล้องเก็บแพคเกจของพวกเขาmsys2, และmingw32mingw64

การสนทนานี้มีประโยชน์มากเช่นกัน: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e


1
"ดังนั้น MSys มาพร้อมกับเลเยอร์ POSIX ( จาก Cygwin เวอร์ชันเก่า ) ... " - สิ่งนี้ช่วยให้ฉันสรุปได้ว่าการติดตั้ง git บน Cygwin ทำให้ 'Git Bash for Windows' ซ้ำซ้อนดังนั้นฉันจึงสามารถถอนการติดตั้งได้
Daniel Sokolowski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.