Git под windows: MSYS или Cygwin?


Я планирую перенести свои проекты на git, и в настоящее время мне интересно, какой из них является лучшим и / или наиболее стабильным вариантом под windows.

из того, что я собираю, у меня в основном есть 2.5 варианта:

  1. MSYSgit
  2. ГИТ в программа
  3. (aka 2.5) MSYSgit из приглашения Cygwin (учитывая, что Cygwin git уже установлен).

Примечание: IMO Cygwin сам по себе является большим плюсом, как вы можете иметь доступ к почти всем инструментам командной строки *nix, как и в случае с MSYSgit bash, у вас есть доступ только к довольно небольшому подмножеству этих инструментов.

учитывая, что какой вариант вы бы предложили?

13 79

13 ответов:

Edit (еще 2 года спустя: октябрь 2014)

Иоганнес Schindelinобъяснил (октября. 2014), что msysgit прекращено:

теперь у нас есть легкий Git для Windows SDK - который по существу является стандартной системой MinGW/MSys, управляемой через менеджер пакетов mingw-get.

мы решили просто отказаться от имени "msysGit" (а также гитхаб организации то же имя) и по Git для Windowsсоответствующий GitHub org), и использование имени" Git для Windows "для установщика, предназначенного для" конечных пользователей "и" Git для Windows SDK " для среды разработки, предназначенной для разработчиков Git для Windows).


Edit (3 года спустя: апрель 2012)

MsysGit (ныне на GitHub) это путь, если вы хотите легкий быстрый старт в Git мир: распакуйте архив, запустите git-cmd.bat или git-bash.bat и вы сделали.
Его последний релиз (1.7.10, апрель 2012 года) теперь включает в себя поддержка UTF-8, и включено в GitExtension. Не забудьте установить свой autocrlf ложь хотя.

Если вам действительно не хватает всех других команд unix, а не пакетов с msysgit, просто загрузите выпуск GoW (Gnu on Windows), метко названный "легкая альтернатива Cygwin".
Я имею в виду: 130 unix command s...

Cygwin должен быть резервным решением только для определенных случаев, таких как скорость передачи большой Git репозитории, как указано ниже по incrementor на ответ.


июнь 2012: Если вы хотите взаимодействовать с GitHub, теперь у вас есть http://windows.github.com (см. также " проектирование GitHub для Windows").
Он не только настроит ключи ssh для вас (и добавит сгенерированный открытый ключ в ваш профиль GitHub), но также установит для всех операций git a... MsysGit.


оригинальный ответ (апрель 2009 года)

у меня нет проблем с последней версией MsysGit:
Я использую 2, что означает, что я добавляю только каталог git\bin для переменной среды PATH, но без переопределения некоторых встроенных средств windows.

мне удалось определить внешние инструменты, такие как Блокнот++ и WinMerge (или DiffMerge)

я успешно запускал скрипты, такие как svn2git потому что, от MsysGit1.6. 2+, он включает в себя ''.

и, наконец, я с нетерпением жду MsysGit1.6.2. 3 для него включит, наконец,'git filter-branch' команда! (медленная версия filter-branch, но все же).

для команды Unix я предпочитаю установить GnuWin32 coreutils пакет, и использовать их только тогда, когда они мне нужны.

Итак, в целом, я не использую слой Cygwin, и мне удалось запустить Git очень хорошо в своем выпуске MsysGit на базе Windows.

да. Старый вопрос. Новый ответ:

мы используем MSYSgit уже около 2 лет в большом развертывании. Скорость передачи данных с локального сервера репозитория git была ограничена менее чем 5 MiB/s. ранее исследование проблемы показало, что проблема заключалась в том, что разработчики MSYS находились на Windows XP и Windows 7, ограничивающих соединения с командной строкой / оболочкой bash. Это, по-видимому, не является, по сути, проблемой.

Я обнаружил запись в блоге Даррелла Мозинго и протестировал клон большого (много GiB) РЕПО, используя только установку Cygwin. Скорости передачи в диапазоне 30 Мб/сек. Проблема в том, что MSYSgit использует античный двоичный файл OpenSSH с 2007 года.

с этой целью, пока это не будет исправлено, я теперь рекомендую перейти на Cygwin (хотя версия git немного отстает). Я также обнаружил, что Cygwin более стабилен и менее вероятно, что у perl закончится память.

Я пробовал использовать как MSYS, так и Cygwin версии git, и, честно говоря, я не нашел ни одного опыта особенно хорошим. Я просто не думаю, что git действительно готов к windows.

это, как говорится, одна проблема, которую я нашел с версией MSYS, заключается в том, что она преобразует окончания строк в ваших (недвоичных) файлах из стиля UNIX (line-feed) в стиль DOS (carriage-return/line-feed). Вы можете считать это ошибкой или особенностью, но нет никакого способа изменить поведение, которое я мог найти. (Изменить: установите переменную конфигурации core.autocrlf до false. Спасибо, Брайан.)

OTOH, версия MSYS git имеет некоторые функции GUI, которые недоступны в версии cygwin, если вы не хотите устанавливать и запускать весь X-сервер. (Спасибо Джос за подтверждение этого.)

у меня сложилось впечатление, что версия MSYS более популярна, хотя это может быть связано с тем, что вам не нужно устанавливать экосистему cygwin для ее использования. (И я согласен, cygwin-это чрезвычайно полезный.)

лично я бы поехал с базар или 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: он обеспечивает простой способ настройки среды: редактор/diff / merge tools и позволяет выполнять расширенные операции git из пользовательского интерфейса.

Я столкнулся с серьезными ошибками в реализации cygwin MSys: некоторые команды, особенно rebase, были довольно склонны к сбою. Cygwin был гораздо более стабильным для меня.

тем не менее, это было месяц назад, возможно, улучшилось с тех пор.

Я использовал как Cygwin Git, так и Msysgit с Windows. Я бы предложил использовать Cygwin + Git. Cygwin 1.7 (в настоящее время в бета-версии) обращается к главному нюансу (по крайней мере для меня) при использовании Git gui и gitk. Более ранние версии Cygwin использовали для открытия 10s окон cmd каждый раз, когда я что-то делаю в Git-gui или gitk. Это было рассмотрено в 1.7. Мощная оболочка Cygwin также приносит много преимуществ терминала linux.

тем не менее, Msysgit эволюционировал совсем немного и действительно полезное в Windows. Однако я столкнулся с несколькими проблемами.

проблема с разрешением: несколько файлов, созданных изначально в windows, имели режим 755, который был преобразован в 644 при использовании Msysgit. Это будет отображаться как измененные файлы. Проверка должна устранить эту проблему.

CRLF: все неуловимые CRLF, как обычно, создает проблемы в Windows. Msysgit может сообщать о файлах как измененных. Это можно исправить, выбрав " оставить окончания строк без изменений "(забыл точный текст) при установке Msysgit.

Daemon: и да, мне все еще сложно настроить git daemon в Msysgit.

новый ответ на старый вопрос ...

Я использую git 1.7.3 из оболочки Windows 7 cmd, и он отлично работает. Я использую сочетание командной строки git и графического интерфейса git, и оба работают нормально в течение нескольких месяцев. У нас действительно были проблемы с возвратом каретки/линией подачи, усугубленные, когда мы добавили разработчиков Mac в команду, но они были решены ...

core.autocrlf=true
core.safecrlf=false

Не говоря, что вы не должны использовать оболочку *nix-y, просто это не обязательно.

У меня есть оговорки в отношении программа потому что я хочу только git, а не какие-либо другие инструменты, которые Cygwin хочет засунуть. Обычно вы хотите, чтобы ваш компьютер с windows работал как компьютер с windows, и CygWin хочет ударить по чему-то совершенно другому. Похлопывание по функциональности * nix только для пинков не должно идти.

дело в том, что если я когда-нибудь захочу работать с *nix, как командная строка, я бы перешел на свою машину Linux и работал на этом компьютере. виртуальные компьютеры и удаленные рабочие столы работа как шарм в настоящее время и достаточно доступна для разработчиков.

там действительно должна быть законная причина для вас, чтобы использовать CygWin. Если это только для использования git я бы предложил вам использовать MSysGit вместо этого, который является моим предпочтением. Он очень хорошо работает с инструментами gitk и Git-gui, которые входят в комплект. Я работаю на Eclipse и Visual Studio с помощью msysgit и он работает как обаяние.

единственное, что я жду сейчас, это полностью рабочий клон черепахи для git.

есть один сценарий под Windows, где вы просто есть использовать Git через Cygwin: это когда вы хотите использовать Git против сервера SVN, который ожидает версии клиента SVN выше 1.5. Существуют крючки предварительной фиксации SVN, которые блокируют фиксацию, когда нет аргумента "mergeinfo", а аргумент "mergeinfo" используется по умолчанию в SVN только с версии 1.5. проблема с msysGit заключается в том, что он построен против более старой версии SVN (1.4.6), поэтому вы не можете успешно совершить в этом случае. но это возможно с Git Cygwin, так как он построен против более новых версий SVN.

Если вы просто хотите делать простые действия, такие как push/pull/ветвление, вы можете попробовать SourceTree из Atlasian. Очень простой и понятный интерфейс для команды Git. Однако он имеет недостаток.

Если вам нужно использовать инструмент командной строки git, просто получите инструмент Git для windows. Этого должно быть достаточно, если вы начинаете искать в скриптах bash.