Git под windows: MSYS или Cygwin?
Я планирую перенести свои проекты в git, и сейчас мне интересно, какой из них лучше и / или наиболее стабилен под Windows.
Из того, что я собираю, у меня в основном есть 2,5 варианта:
- MSYSgit
- мерзавец под Cygwin
- (он же 2.5) MSYSgit из приглашения Cygwin (учитывая, что Cygwin git уже установлен).
Примечание: IMO Cygwin сам по себе является большим плюсом, так как вы можете иметь доступ почти ко всем инструментам командной строки * nix, так как в случае MSYSgit bash у вас есть доступ только к довольно небольшому подмножеству этих инструментов.
Учитывая это, какой вариант вы бы предложили?
13 ответов
Изменить (еще 2 года спустя: октябрь 2014 г.)
Йоханнес Шинделин только что объяснил (октябрь 2014 г.), что msysgit постепенно исчезает:
теперь у нас есть облегченный Git для Windows SDK - по сути, это стандартная система MinGW/MSys, управляемая через менеджер пакетов mingw-get.
Мы решили просто отказаться от имени "msysGit" (а также от организации GitHub с тем же именем) и поработать над Git для Windows (с соответствующей организацией GitHub), используя имя "Git for Windows" для установщика, нацеленного в разделах "Конечные пользователи" и "Git for Windows SDK" для среды разработки, ориентированной на разработчиков Git для Windows).
Изменить (3 года спустя: апрель 2012 г.)
MsysGit (теперь на GitHub) - это то, что нужно, если вы хотите легкий быстрый старт в мире Git: разархивируйте архив, запустите git-cmd.bat
или же git-bash.bat
и вы сделали.
Его последняя версия (1.7.10, апрель 2012 г.) теперь включает поддержку UTF-8, также включенную в GitExtension. Не забудьте установить свой autocrlf
ложно, хотя.
Если вы действительно упускаете все остальные команды unix, а не пакеты с msysgit, просто скачайте релиз GoW (Gnu в Windows), который называется "Легкая альтернатива Cygwin".
Я имею в виду: 130 команд Unix...
Cygwin должен быть решением для резервного копирования только для определенных случаев, таких как скорость передачи больших репозиториев Git, как указано ниже в своем ответе incrementor.
Июнь 2012: если вы хотите взаимодействовать с GitHub, у вас теперь есть http://windows.github.com/ (см. Также " Разработка GitHub для Windows ").
Он не только настроит ключи ssh для вас (и добавит сгенерированный открытый ключ в ваш профиль GitHub), но также установит для всех операций git... MsysGit.
Оригинальный ответ (апрель 2009 г.)
У меня нет проблем с последней версией MsysGit:
Я использую опцию 2, что означает, что я только добавляю каталог git\bin в переменную окружения PATH, но не переопределяя некоторые встроенные инструменты Windows.
Мне удалось определить внешние инструменты, такие как Notepad++ и WinMerge (или DiffMerge)
Я успешно запустил такие скрипты, как svn2git, потому что из MsysGit1.6.2+ он включает git svn
командовать
И, наконец, я с нетерпением жду MsysGit1.6.2.3, поскольку он будет включать git filter-branch
'команда! (медленная версия filter-branch, но все же).
Для команды Unix я предпочитаю установить пакет coreutils GnuWin32 и использовать их только тогда, когда они мне нужны.
В общем, я не использую слой Cygwin, и мне удалось очень хорошо запустить Git в его версии для Windows, MsysGit.
Да. Старый вопрос Новый ответ:
Мы используем MSYSgit уже около 2 лет в крупном развертывании. Скорость передачи данных с локального сервера репозитория git была ограничена менее 5 МБ / с. Ранее проведенное расследование показало, что проблема заключалась в том, что разработчики MSYS работали в Windows XP и Windows 7, ограничивая безопасность подключений из командной строки / оболочки bash. На самом деле это не проблема.
Я обнаружил публикацию в блоге Даррелла Мозинго и протестировал клон большого репо (много GiB), используя только установку Cygwin. Скорость передачи была в диапазоне 30 МБ / с. Проблема в том, что MSYSgit использует античный двоичный файл OpenSSH с 2007 года.
С этой целью, пока это не будет исправлено, я сейчас рекомендую перейти на Cygwin (хотя версия git немного отстала). Я также обнаружил, что Cygwin более стабилен и менее вероятно, что Perl исчерпает память.
Я баловался с использованием версий git для MSYS и Cygwin, и, если честно, я не нашел ни одного опыта, особенно хорошего. Я просто не думаю, что Git действительно готов для Windows.
При этом, одна проблема, которую я обнаружил с версией MSYS, заключается в том, что она преобразует окончания строк в ваших (недвоичных) файлах из стиля UNIX (перевод строки) в стиль DOS (возврат каретки / перевод строки). Вы можете считать это ошибкой или функцией, но нет способа изменить поведение, которое я мог найти. (РЕДАКТИРОВАТЬ: установить переменную конфигурации core.autocrlf
в false
, Спасибо Брайан.)
OTOH, версия git для MSYS имеет некоторые функции графического интерфейса, которые недоступны в версии cygwin, если вы не хотите устанавливать и запускать весь X-сервер. (Спасибо, Джос, за подтверждение этого.)
У меня сложилось впечатление, что версия MSYS более популярна, хотя это может быть потому, что вам не нужно устанавливать экосистему cygwin для ее использования. (И я согласен, Cygwin чрезвычайно полезен.)
Лично я бы выбрал Bazaar или Mercurial, которые лучше поддерживают Windows IMO.
И Cygwin, и Msys Git работают достаточно хорошо для обычных сценариев использования. Если вы хотите использовать такие скрипты, как git-svn, лучше использовать Cygwin. Как старые пользователи Windows, которые наконец-то перешли на Linux, я могу с уверенностью сказать, что Cygwin - это великое благо, которое стоит иметь само по себе.
Контекст важен, хотя; что это за проекты? Кем они используются? И т.п.
Я также протестировал оба мира (CygWin и MSysgit), мой опыт также показывает, что в MSysgit bash есть некоторые недостатки. Невозможно успешно запустить git stash, пока Cygwin изящно обрабатывал его в том же git-репо.
Глубокий анализ еще не сделан, хотя...
В настоящее время я использую Msysgit вместе с TortoiseGit.
Пользовательский интерфейс MsysGit мне не очень нравится, поэтому я использую знакомый инструмент, такой как TortoiseGit, и при работе с командной строкой (большую часть времени) я использую двоичный файл git из Msysgit.
Я бы порекомендовал msysgit. Особенно, если он используется с Git Extensions: он предоставляет простой способ настройки среды: инструменты редактора / сравнения / слияния и позволяет выполнять расширенные операции git из пользовательского интерфейса.
Я использовал и Cygwin Git и Msysgit с Windows. Я бы предложил использовать Cygwin + Git. Cygwin 1.7 (в настоящее время в бета-версии) устраняет главный нюанс (по крайней мере для меня) при использовании git gui и gitk. Более ранние версии Cygwin открывали десятки окон cmd каждый раз, когда я что-то делаю в git-gui или gitk. Это было решено в 1.7. Мощная оболочка Cygwin также содержит много полезного в терминале Linux.
Тем не менее, Msysgit эволюционировал совсем немного и действительно полезен в Windows. Я столкнулся с парой проблем, хотя.
Проблема с разрешением: несколько файлов, созданных в Windows, имели режим 755, который был преобразован в 644 при использовании Msysgit. Это будет отображаться как измененные файлы. Проверка должна исправить эту проблему.
CRLF: все неуловимый CRLF, как обычно, создает проблемы в Windows. Msysgit может сообщать файлы как измененные. Это можно исправить, выбрав "Оставить окончания строк без изменений" (забыл точный текст) при установке Msysgit.
Демон: И да, мне все еще сложно настроить git daemon в Msysgit.
Я столкнулся с серьезными ошибками в реализации MSys Cygwin: некоторые команды, особенно ребаз, были довольно подвержены сбоям. Cygwin's был гораздо более стабильным для меня.
Тем не менее, это было месяц назад, возможно, улучшилось с тех пор.
Новый ответ на старый вопрос...
Я использую git 1.7.3 из оболочки Windows 7 cmd, и она прекрасно работает. Я использую сочетание командной строки git и git gui, и оба месяца работали нормально. У нас действительно были проблемы с возвратом каретки / переводом строки, которые усугублялись, когда мы добавляли разработчиков Mac в команду, но они были решены с помощью...
core.autocrlf=true
core.safecrlf=false
Не говорю, что вы не должны использовать оболочку *nix-y, просто в этом нет необходимости.
Если вы просто хотите выполнять простые действия, такие как push/pull/branching, вы можете попробовать SourceTree из Atlasian. Очень простой и понятный интерфейс для команды Git. Однако это имеет недолгое время.
Если вам нужно использовать инструмент командной строки git, просто получите инструмент Git for windows. Этого должно быть достаточно, если только вы не начнете искать скрипты в bash.
В Windows существует один сценарий, когда вам просто нужно использовать Git через Cygwin: это когда вы хотите использовать Git против сервера SVN, который ожидает версии клиента SVN выше 1.5. Существуют ловушки предварительной фиксации SVN, которые блокируют фиксацию при отсутствии аргумента 'mergeinfo', а аргумент 'mergeinfo' по умолчанию используется в SVN только с версии 1.5. Проблема с msysGit заключается в том, что он построен на более старой версии SVN (1.4.6), поэтому в этом случае вы не можете выполнить успешную фиксацию. Но это возможно с Git Cygwin, так как он построен на более новых версиях SVN.
У меня есть оговорки в отношении CygWin, потому что я хочу только git, а не другие инструменты, которые Cygwin хочет внедрить. Обычно вы хотите, чтобы ваш компьютер с Windows работал как компьютер с Windows, а CygWin хочет использовать что-то совершенно другое. Хлопать по функциональности * nix просто ради удовольствия не стоит.
Дело в том, что если я когда-нибудь захочу работать с * nix, подобным командной строке, я перейду к своей машине с Linux и вместо этого поработаю на этом компьютере. Виртуальные компьютеры и удаленные рабочие столы работают сегодня как шарм и достаточно доступны для разработчиков.
Там действительно должна быть законная причина для вас использовать CygWin. Если это только для использования git, я бы посоветовал вам использовать MSysGit, что является моим предпочтением. Он очень хорошо работает с инструментами gitk и git-gui, которые в комплекте. Я работал как на Eclipse, так и на Visual Studio, используя msysgit, и это работает как шарм.
Единственное, что я сейчас жду, - это полностью работающий черепаховый клон для мерзавца.