50

Я с радостью использую Git и Git Bash с https://git-scm.com/. Здесь есть страница с дополнительной информацией: https://git-for-windows.github.io/.

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

Изучая "Что такое Git Bash", я читал о Cygwin и другой вещи, называемой mysys2, которая, похоже, связана с mysysGit , и увидел ссылки на MinGW . Но затем я увидел в FAQ, что mintty является терминалом по умолчанию для Git Bash.

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

По сути, я хотел бы знать, что является основой, которая заставляет команды * nix, такие как ssh scp cat ls работать в Git Bash для Windows?

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

2 ответа2

56

Резюме

Вы правы, Git Bash для Windows - это не просто bash скомпилированный для Windows. Это пакет, который содержит bash (который является оболочкой командной строки) и набор других, отдельных * nix-утилит, таких как ssh , scp , cat , find и другие (которые вы запускаете с помощью оболочки), скомпилированные для Windows, и новый окно терминала интерфейса командной строки называется mintty .

В двух словах

В Windows вы можете запускать такие команды, как ipconfig /all или format G: using 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. Windows-реализация API / библиотек POSIX предоставляется Cygwin и MSYS .

Это похоже на то, что делает проект Wine , но он конвертирует POSIX-> Windows, а не Windows-> POSIX, как Wine.

mintty

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

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 - это настоящая командная строка окна, mintty. Слава Богу, это существует, но это не то, что мне нужно, чтобы Google.

Рекомендации для MSYS2

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

Во введении эта часть наиболее актуальна для моего первоначального вопроса:

MSYS2 состоит из трех подсистем и их соответствующих хранилищ пакетов, msys2 mingw32 и mingw64

Это обсуждение также очень полезно: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .