Установил Git for Windows с сайта https://git-scm.com/
После установки есть возможность запускать две консоли - git cmd и git bash.
Я так понимаю, что git cmd - командная строка windows, а git bash - командная строка linux. Первые шаги при использовании не выявили существенных отличий в работе обоих. Заметил лишь, что в git bash есть удобное и достаточно приятное выделение цветом, а также подсказки для команд при двойном нажатии Tab.
Наверняка есть более глобальные отличия между git cmd и git bash, которые заставят любителя cmd запускать bash. Вопрос: какие? Ибо тогда зачем в сборку для windows добавлять альтернативу cmd?
- 5,542
1 Answers
Не бывает git cmd или git bash. Есть только сервисные утилиты, а точнее одна сервисная утилита с разными именами: git-cmd.exe и git-bash.exe.
Оба эти exe-шника делают
- Инициализация переменных окружения (PATH, и пр.)
- Запуск терминала.
Разница между ними только одна - по умолчанию git-bash.exe запускает терминал mintty с bash внутри. git-cmd.exe запускает стандартный терминал Windows с cmd.exe. Более того, git-cmd.exe имеет ключик --command=... с помощью которого можно запустить bash вместо cmd при желании.
git.exe это самостоятельная программа рядом с которой лежат все необходимые утилиты из пакета msys (например ls, vim, sed, и прочая), а недостающие утилиты можно "доставить" с помощью pacman. Предполагаемая проблема с "путями" не имеет оснований - все команды выполняет сам гит.
git add **/*.cpp будет обрабатываться самим гитом.
Реальные различия:
- Из командной строки cmd.exe несколько меняется синтаксис, т.к.
^это управляющий символ cmd.exe. Например, вместоgit.exe rebase -i 2385397^1нужно писатьgit.exe rebase -i 2385397^^1. - Маски файлов, вроде вышеописанного
git add *.cppне "разворачиваются" в список файлов, то есть аргументы передаются без изменений и git самостоятельно выполняет поиск подходящих файлов. В итоге мы имеем ошибочное поведение когдаgit add *.cppдобавляет файлы из подкаталогов. - В консоли cmd.exe (если только она не в ConEmu запущена) нельзя использовать 256 цветов в Vim.
Вот наверное и всё.
- 228
-
1
-
2называется "не разобрался, но критикую". Говоря о путях, я имел ввиду то, что в большинстве инструкций для гита они указываются в юникс стиле, и bash.exe (с окружением) их прекрасно поймет. А вот cmd - нет.
С глобами не все тоже так прозрачно. Обычно баш сам раскрывает их, но в большинстве случаев гит сам раскрывает пути точно также. И это очень прозрачно.
– KoVadim Apr 14 '16 at 07:19 -
1@KoVadim Можно тогда пример команд с "путями", которые не будут выполнены из git-cmd.exe? – Maximus Apr 14 '16 at 09:11
-
здесь есть пример - http://ru.stackoverflow.com/questions/431839/%D0%92-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-git-add-add-a-add-u-%D0%B8-add – KoVadim Apr 19 '16 at 10:46
-
я вот с путями столкнулся в противоположную сторону - в винде из проводника копируешь путь (C:\Program Files) и работает в cmd, а для bash старайся меняй на /c/blabla/ - все \ на / - задержка работы. – Alex Martian Dec 28 '18 at 06:54
-
@AlexeiMartianov В ConEmu при вставке путей в консоль происходит автоматическое преобразование формата. – Maximus Dec 29 '18 at 09:45
-
@Maximus, правильно я понял, что эта утилита не из пакета гита? (чтобы понятно было читающим вопрос-ответ...) – Alex Martian Jan 01 '19 at 12:49
-
@AlexeiMartianov А про какую из упомянутых в ответе утилит вы спрашиваете? ;) ConEmu самостоятельная программа, но насколько я помню, в гите есть пакет с ней. – Maximus Jan 02 '19 at 10:27
git add **/*.cpp). Также в bash доступные многие удобные утилиты, которых нет в cmd. И конечно же, многие мануалы по настройке гита будут легко настраиваться с баш консоли, но не cmd (придется правильно угадывать пути и тому подобное). – KoVadim Apr 13 '16 at 14:40