Подтвердить что ты не робот

Каковы ограничения Git на Windows?

Всюду, где я читал о Mercurial и Git, они обычно бросают строку или две, что подразумевает, что Git имеет ограниченные возможности в Windows (из-за того, что некоторые оболочки Shell не могут быть перенесены и т.д.), но я никогда не сталкивался на какой-то странице, в которой они явно упоминаются. И большинство страниц немного старые.

Каковы ограничения Git на Windows с точки зрения функциональности? И нужно ли запускать Git на MinGW, а MSYS на Windows - ограничения производительности?

4b9b3361

Ответ 1

EDIT: Итак, 2016 год, через шесть лет, когда я написал оригинальный ответ ниже. Я использовал git и меркуриально в течение нескольких лет, и я развиваюсь на Mac уже несколько лет. Я привык и удобен с использованием git в командной строке, но для повседневной работы я использую SourceTree от Atlassian. Это не реклама, просто примечание для обновления этого ответа. SourceTree - это двойная абстракция: тот же ui для git/hg, и тот же ui для Windows/Mac. Когда вам приходится часто менять платформы и проекты, это становится очень привлекательным.

Написав руководство по настройке как клиента, так и сервера для git в Windows, у меня есть довольно хорошее представление о том, что можно ожидать. Кроме того, мой основной репозиторий (папка .git) составляет ~ 260 МБ источника, поэтому это действительно не тривиальный тест производительности для повседневной работы git в Windows.

Мое общее впечатление состоит в том, что git в окнах очень быстро для большинства ситуаций, с которыми можно столкнуться, с одним действительно большим исключением: git gui blame -C -C. По умолчанию git не будет винить файлы за пределами границ переименования файлов, а дополнительные аргументы -C -C должны быть переданы, чтобы это произошло, но тогда все может действительно замедлить работу. Для создания полной аннотации одного из наших более ~ 20 kloc исходных файлов требуется 17 минут на современном оборудовании. Эта задержка может действительно нарушить вашу концентрацию.

Относительно cygwin:

Я только один раз пробовал это, а не для чего-то значительного. Я действительно хотел найти собственное решение. По всем данным, git на cygwin работает достаточно хорошо.

Относительно TortoiseGit

Фрэнк Ли сделал огромную работу, привнеся теперь знакомый пользовательский интерфейс в мир git. TortoiseGit запущен очень быстро, потому что большая часть пользовательского интерфейса была доступна от TortoiseSVN (и других инструментов, таких как TortoiseMerge), и я много работал с этим интерфейсом. В общем, это позволяет быстро перейти на git, если вы знакомы с TortoiseSVN. Разработчик пошел на большие усилия, чтобы использовать термины из мира TortoiseSVN и сопоставить их с командами git. Например, реверс действительно выполняет git checkout <file> под капотом.

В общем, работа с git таким образом была довольно плавной, и я должен признать, что узнал git при использовании интерфейса TortoiseGit: и нужно признать, что это было помехой для моего образования. Средство просмотра журналов TortoiseSVN не работает для рабочего процесса распределенных vcs (он работает достаточно хорошо, вы используете git, как если бы это был SVN), и вы только узнаете об этом позже, потому что проблемы возникают только тогда, когда есть много, много ветвей развития (инструмент gitk намного лучше справляется с этим дисплеем). Другая проблема заключается в том, что даже после использования TortoiseGit в течение многих месяцев я до сих пор не знал даже самых простых команд git. В TortoiseGit нет ничего плохого, и ошибки возникают исправно, быстро, когда они происходят; основной проблемой, по-видимому, является проблема дизайна (возможно, более одного) в пользовательском интерфейсе, что разработчики gitk и git gui разработали из-за более продолжительной истории развития или более глубокого знания идиоматических git использование или что-то в этом роде.

Что касается использования командной строки:

MSYS git команда разработчиков - это те, кому действительно следует поблагодарить за то, что они даже потрудились выполнить всю свою работу, и без их поддержки, вероятно, ветка mww git никогда бы не была объединена с основной линией.

Теперь я начал использовать msysgit, как и в оболочке git Bash, как мой единственный git интерфейс в течение нескольких недель. У меня сложилось впечатление, что, хотя первоначальное обучение кажется более трудным, как только это знание будет достигнуто, все остальное станет легче. Эта ссылка является, на мой взгляд, одной из действительно лучших ссылок, изучающих git в командной строке.

Говоря как пользователь git в Windows и исходящий из расширенного опыта с использованием интерфейса TortoiseGit для git, это сводка моего рабочего процесса, которая охватывает > 95% того, что необходимо (все в git Bash, а не командная оболочка Windows (cmd)):

  • Проверить наличие изменений

    git статус

  • Отключить ветвь

    git checkout some-feature-branch

  • Fetch

    git fetch

  • Показать журнал (& отделяет процесс gitk от оболочки, так что оболочка не ждет закрытия gitk перед тем, как разрешить больше команд)

    gitk &

  • Commit: либо

    • Простая фиксация:

      git commit -a -m "Это мое сообщение с сообщением"

    • Сложные, множественные последовательные фиксации:

      git gui

  • Нажмите на ветку: мастер

    git нажмите начало оригинала

  • Слияние (например, после Fetch)

    git merge origin/master

Мне еще не нужно было разрешать конфликт, но я подумаю, когда придет время (комментарии приветствуются:).

EDIT: для разрешения конфликтов kdiff3 - это путь. Настройка проста, и все от простого до трехстороннего слияния работает надежно и быстро.

Выводы

  • git в Windows полнофункциональный и работает как рекламируемый и не ограничен Windows.

  • Производительность, как правило, очень хорошая, но всеобъемлющие большие обвинения могут быть медленными.

  • Интерфейс TortoiseGit является соблазнительным, но в конечном итоге неудовлетворительным: вы должны попытаться изучить git в командной строке. Я сделал оба, и этот маршрут более эффективен.

Ответ 2

  • сомнительная поддержка подстановочных знаков:
    (проблематично для файлов .gitignore)
    отправьте базовый OS-метод fnname(): см. этот вопрос и тот (или то, что один)

  • git -svn может быть не очень быстрым.
    Источник: этот SO ответ. Однако он достиг некоторого успеха.

  • PATH необходимо скорректировать, чтобы предотвратить конфликт Некоторые команды одинаковы между Windows и bash. (find, cp, rm,...).
    См. Этот SO ответ.
    В качестве cjrh комментариев Git для Windows не добавляет каталог bin по умолчанию к PATH.

  • может произойти некоторое преобразование EOL (Unix vs. Windows EOL)
    См. Окончательная рекомендация для параметров git autocrlf.
    Новые и улучшенные атрибуты core.eol и eol из Git1.7.2 еще не указаны в msysgit.

Ответ 3

(Вероятно, это скорее комментарий, чем ответ, но мой представитель еще не совсем там.)

Недавно я подумал об одном и том же, и я тоже не смог его выкопать. Здесь одно интересное обсуждение (обнаружено через цитата на Git википедия запись).

Насколько я могу судить, основными проблемами являются производительность (в частности, Cygwin и/или с большими репозиториями) и проблемы с файловой системой (имя файла без учета регистра, ограниченная VFS).

Чисто субъективно/анекдотично:

Я чувствую, что Git - это гораздо более приятный опыт, который работает под Ubuntu 10.04, чем на Cygwin под Win7 на той же машине - настолько, что я перекладываю почти все мои работы по внешнему веб-разработке на Ubuntu использовать его (между прочим). Я узнал Git на моей машине OSX на работе, поэтому попытка работать с ним на Windows впоследствии была почти болезненной. msysgit, безусловно, является улучшением по сравнению с Cygwin, но он все еще страдает от ограничений файловой системы Windows.

EDIT. По-видимому, msysgit зажимает имена файлов, которые были введены в Git через файловую систему с поддержкой UTF8, например Linux, который отстой.

Я также просто наткнулся на GitSharp, встроенная версия WIP для Windows (обнаружена через этот комментарий в блоге).