Что такое 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, что кажется разумным.

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

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

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

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

geneorama
источник
Нашел здесь очень хороший ответ: что означает Git Bash?
Geneorama
1
Я думаю, что официальное название / вещь для Google - "git bash". Помогает иметь его в кавычках, так как оба слова имеют значение независимо друг от друга.
Geneorama
Хорошая дискуссия о Reddit здесь и здесь (с 2017 года). Они даже отвечают на мой оригинальный rsyncвопрос !!
Geneorama

Ответы:

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. Windows-реализация API / библиотек POSIX предоставляется Cygwinи MSYS.

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

mintty

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

Pabru
источник
1
Оказывается, что на большинство моих вопросов ответили в FAQ проекта: github.com/git-for-windows/git/wiki/FAQ, и я могу найти более конкретную информацию в группе google groups.google.com/forum/#! форум / мерзавец для windows .
Geneorama
@geneorama Это не должно быть проблемой, чтобы принять этот ответ, если он был действительно правильным, информативным и полезным.
Вален
1
@geneorama Заполнение этого пробела могло быть вашим намерением, но это был не тот вопрос, который вы задали. Ваш пост называется "Что такое Git Bash для Windows?" и единственный вопрос, представленный в его тексте: «Я хотел бы знать, что является основой, которая заставляет команды * nix, такие как ssh scp cat lsработа в Git Bash для Windows?» , Пост Пабру довольно хорошо отвечает на оба вопроса и является правильным ответом для всех, у кого может быть тот же вопрос (как указано), поэтому, принимая его, вы помогаете другим пользователям. Вы пытались опубликовать новый вопрос по rsyncпроблеме?
Вален
4
@walen размещать вопросы на SO и связанных сайтах настолько неприятно, что я сомневаюсь, что когда-нибудь буду публиковать больше вопросов. На самом деле это был тест, и он подтвердил мои чувства. В моих попытках сделать вопрос лаконичным и задокументировать свое исследование (и я потратил целый день на исследования), я думаю, что пропустил реальный вопрос. Когда я редактирую внимательно, люди воспринимают краткость как недостаток исследований. Если я сделаю вопрос слишком многословным, он будет проигнорирован. Несмотря ни на что, вопрос подвергается критике (несколько грубых комментариев было удалено). Даже мои «знаменитые» вопросы поначалу были сильно опущены.
Geneorama
1
@geneorama Если вас это утешит, ваш вопрос помог мне узнать больше о git bash, прежде чем даже прочитать ответ. Но я понимаю, что вы имеете в виду.
Вален
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, 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

geneorama
источник
1
«Следовательно, MSys поставляется со слоем POSIX ( на основе старой версии Cygwin ) ...» - это помогло мне сделать вывод, что установка git на Cygwin делает избыточным «Git Bash для Windows», поэтому я могу просто удалить его.
Даниэль Соколовский