Що таке Git Bash для Windows?


61

Я із задоволенням використовую Git та Git Bash з https://git-scm.com/ . Тут розміщена сторінка з додатковою інформацією: https://git-for-windows.github.io/ .

Вчора я зіткнувся з проблемою rsync, і я почав копатися глибше в Git Bash для Windows. Я зрозумів, що навіть не впевнений у назві програми Bash, тому що вона просто в комплекті із завантаженням git-scm. Я називаю це Git Bash для Windows, що здається розумним.

Переглядаючи "Що таке Гіт Баш", я читав про Cygwin та іншу річ під назвою mysys2 , яка, схоже, пов'язана з цим mysysGit, і я побачила посилання на MinGW. Але тоді я побачив у FAQ, що монетний двір - це типовий термінал для Git Bash.

Здається, що програма Bash - це фактично кураторний набір інших речей (здебільшого перерахованих вище), які доступні незалежно.

В принципі, я хотів би знати, що є основою, яка робить * nix команди, як ssh scp cat lsробота в Git Bash для Windows?

(Я думаю, що хороша відповідь допомогла б комусь зрозуміти широкими штрихами, як ці компоненти поєднуються між собою та розуміють правильні слова для компонентів, але я не хочу порушувати формат запитань / відповідей.)


Тут ми знайшли дуже гарну відповідь: Яке точне значення має Git Bash?
генеорама

1
Я думаю, що офіційна назва / річ у Google - це "git bash". Допомагає мати це в лапках, оскільки обидва слова є значеннями незалежно.
генеорама

Деякі хороші дискусії про Reddit тут і тут (з 2017 року). Вони навіть адресують моє оригінальне rsyncпитання !!
генеорама

Відповіді:


72

Підсумок

Ви маєте рацію, Git Bash для Windows складається не просто bashдля Windows. Це пакет , який містить bash(який є оболонкою командного рядка ) і набір інший, окремою * NIX утиліти , такої як 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яку також можна знайти в емульованому середовищі Linux у розділі /usr/bin.

Подібно до того, що можливість просто запустити cmd.exe* nix не дозволяє зробити багато без інших системних утиліт, так само можливість роботи Bash в Windows також не дуже корисна. Це означає, що всі ці додаткові команди потрібно поєднати разом з Bash, щоб створити корисний пакет програм.

Докладніше: POSIX-програми у Windows

Зазвичай ці додаткові команди знаходяться у системах * nix, а не в Windows, оскільки вони запрограмовані проти API програмування POSIX (для чого використовується * nix), а не API Win32 (для чого використовується Windows). Документація POSIX API доступна відкрито, тому деякі люди перенесли її в інші системи, включаючи Windows. Реалізація API / бібліотек POSIX для Windows надає Cygwinта MSYS.

Це схоже на те, що робить проект Wine , але він конвертує POSIX-> Windows, а не Windows-> POSIX, як це робить Wine.

м'ятний

minttyвключено, оскільки cmd.exeу вікні командного рядка Windows за замовчуванням відсутні деякі важливі функції, які зазвичай доступні у більшості * nix систем. У більшості випадків minttyце кращий вибір для запуску команд (звичайно, для утиліт, які постачаються з пакетом Git Bash для Windows), але іноді системна програма Windows може працювати краще cmd.exe.


1
Виявляється, що на більшість моїх запитань відповіли у FAQ-відповідях проекту: github.com/git-for-windows/git/wiki/FAQ, і я можу знайти більш конкретну інформацію в групі google groups.google.com/forum/#! форум / git-for-windows .
генеорама

@geneorama Це не повинно бути проблемою, щоб прийняти цю відповідь, якщо вона справді була правильною, інформативною та корисною.
walen

1
@geneorama Заповнення цього бланку, можливо, було вашим наміром, але це не було питання, яке ви зробили. Ваше повідомлення має назву "Що таке Git Bash для Windows?" , і єдине питання, яке присутнє в його тілі, - це "я хотів би знати, що є основою, що робить * nix команди, як ssh scp cat lsробота в Git Bash для Windows?" . Пост Пабру досить добре відповідає на обидва запитання і є правильною відповіддю для тих, хто може мати те саме питання (як зазначено), тому приймаючи його, ви допомагаєте іншим користувачам. Ви спробували опублікувати нове запитання щодо rsyncпроблеми?
walen

4
@walen розміщувати питання на SO та на пов’язаних з ними сайтах настільки неприємно, що я сумніваюся, що коли-небудь буду публікувати більше запитань. Це було насправді тестом, і це підтвердило мої почуття. Намагаючись утримати питання стислим і документувати моє дослідження (і я провів цілий день на дослідженні), я думаю, що я залишив власне питання. Коли я ретельно редагую, люди, схоже, сприймають стислість як брак досліджень. Якщо я ставлю запитання занадто багатослівним, воно ігнорується. Незважаючи ні на що, питання піддається критиці (кілька прямо-таки грубих коментарів видалено). Навіть мої "знамениті" запитання спочатку були сильно прихильні.
генеорама

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), з інтерпретатором 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, але не тим, що складено в цьому середовищі.

До речі, на всякий випадок, коли повне README видаляється, я скопіював це в суть .

Вікно терміналу: mintty

Інша частина Git Bash для Windows - це власне командний рядок Windows, м'ятний. Слава богу, що вона існує, але це не те, що мені потрібно гуляти.

Посилання на MSYS2

Їх вікі - справжня скарбниця деталей про середовище MSYS2: https://github.com/msys2/msys2/wiki

У вступі ця частина є найбільш актуальною для мого початкового питання:

MSYS2 складається з трьох підсистем і відповідні їм репозиторії, msys2, mingw32і mingw64.

Ця дискусія також дуже корисна: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e


1
"Отже, MSys постачається з POSIX-шаром ( на основі старої версії Cygwin ) ..." - це допомогло мені просто зробити висновок, що встановлення git на Cygwin робить "Git Bash для Windows" зайвим, тому я можу просто його видалити.
Данило Соколовський,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.