Альтернативи Git for Windows

На даний момент (початок квітня 2015) «офіційна» версія Git для Windows — 1.9.5, в той час як для всіх інших платформ уже доступна версія 2.3.5. Звідси і природний інтерес до оновлення Git for Windows до актуальної версії або заміні його на альтернативний дистрибутив.

Після невеликого дослідження були виявлені наступні способи (дистрибутиви) використання Git на платформі Windows.

Git for Windows.

Дистрибутив, пропонований на офіційному сайті git-scm, заснований на проекті MSYS. Тобто фактично це портований на ос Windows Git плюс деяка підмножина утиліт GNU, необхідне для роботи Git.

З недоліків можна відзначити застарілу версію Git і інших утиліт GNU. В багтрекері кілька років висять запити на оновлення утиліт (perl, ssh, ...).

Відсутні необхідні мені утиліти (rsync, ...). Їх доводиться запозичувати з проекту MSYS, що не завжди спрацьовує (різні версії, іноді несумісні один з одним).

В даний момент проект переходить на іншу базу — MinGW-w64 + MSYS2. Розробники виклали developer's Preview версію, але на момент перевірки в ній була відсутня утиліта ssh, та й проблема з додаванням інших утиліт, схоже, залишиться. Але GNU утиліти оновилися до актуальних, особливо perl.

Добірка утиліт від проекту MinGW-builds

Ця збірка була виявлена практично випадково, в процесі пошуку більш свіжої версії GCC. Містить всі необхідні мені утиліти. Але, на жаль, вже давно не оновлюється.

MSYS2

Дізнався, що існує незалежний проект MSYS2 з повідомлень на багтрекері проекту git-for-windows. З плюсів:
  • незалежний від MSYS проект,
  • використовує MinGW-w64,
  • використовує портований з Arch Linux менеджер пакетів Pacman (більш стабільний і функціональний, на відміну від вироби mingw-get),
  • свіжі версії утиліт,
  • присутній git в пакетах,
  • є 64-бітна версія.
З мінусів, мабуть, більший розмір при установці за замовчуванням, порівняно з Git for Windows. Але зайві пакети можна видалити.

EGit/JGit

Реалізація Git від Eclipse (на Java). Є можливість викликати з командного рядка, але потрібно MSYS shell, і це швидше proof-of-concept, ніж нормальний спосіб роботи.

SmartGit/Hg

Це теж власна реалізація Git на Java. Немає нормальної можливості працювати в командному рядку. А так, чудовий інструмент, є Open Source License.

libgit2

Дуже багатообіцяючий проект. Робиться спочатку портируемым, реалізація на чистому С. Але поки немає проектів, які реалізували всю функціональність Git (GUI + command line) з допомогою тільки цієї бібліотеки.

Проекти:
  • Git-GUI — альфа версія, немає командного рядка.
  • Github for windows — використовує Git for Windows для командного рядка.
Тут також можна відзначити проект posh-git, але, як я зрозумів, він теж вимагає, щоб Git вже був доступний з командного рядка.

Cygwin

відміну від MSYS, реалізує (або намагається) повний шар POSIX для додатків. Мені більше імпонує MSYS підхід. При використанні він мені здався більш тяжким, порівняно з MSYS.

Разом

Зупинився на MSYS2. Сподобалося те, що Git зроблений у вигляді пакету (з залежностями та ін), а так само наявність свіжих утиліт GNU, які легко встановити з пакетів.

Далі будуть описані: зауваження, що з'явилися в процесі експлуатації, можливі труднощі і шляхи їх вирішення.

Установка

1. Завантажити 32-bit або 64-bit MSYS2. Так, тепер є і 64-бітний Git, зауваження про нього нижче.

В імені папки для встановлення (та шляхи) не повинно бути прогалин і повинні бути лише символи ASCII (ASCII, no accents, spaces nor symlinks, short path). Надалі я буду посилатися на цю папку як %MSYS2_DIR%.

Після закінчення установки запустіть MSYS2 Shell (Пуск → Усі програми → MSYS2).

2. Встановити та оновити пакети MSYS2 (більш детально описано тут або тут з картинками):

pacman-Sy
pacman --needed-S bash pacman pacman-mirrors msys2-runtime

Перезапустити MSYS2 Shell і запустити %MSYS2_DIR%\autorebase.bat для 32-бітної версії. Далі

pacman-Su

3. Налаштувати HOME

За замовчуванням папка HOME створюється %MSYS2_DIR%\home\%USERNAME%, і в неї будуть скопійовані файли %MSYS2_DIR%\etc\skel, як описано в %MSYS2_DIR%\etc\post-install\05-home-dir.post. Є можливість налаштувати папку HOME = %USERPROFILE%. Для цього перемістіть всі файли з %MSYS2_DIR%\home\%USERNAME% %USERPROFILE% і виправте у файлі %MSYS2_DIR%\etc\nsswitch.conf рядок «db_home: cygwin desc» «db_home: windows desc»

perl-pi.orig-e "s/db_home:\s+cygwin\s+desc/db_home: windows desc/" nsswitch.conf

Якщо змінна HOME вже є, то файли з %MSYS2_DIR%\etc\skel нікуди копіюватися не будуть. При необхідності, скопіюйте їх вручну, та/або поновіть .bashrc та ін файли.

4. Встановити Git

pacman-S git

Налаштування

1. Для додавання автодоповнення (Tab) команд Git та додаткової інформації в command prompt скопіюйте файли:

%MSYS2_DIR%\usr\share\git\completion\git-completion.bash -> %HOME%\.git-completion.bash
%MSYS2_DIR%\usr\share\git\completion\git-prompt.sh -> %HOME%\.git-prompt.sh

Файл %HOME%\.bashrc додайте рядків

. ~/.git-completion.bash
. ~/.git-prompt.sh

PS1='\[\033]0;$MSYSTEM:${PWD//[^[ascii:]]/?}\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change color to green
PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1"'\[\033[33m\]' # change color to yellow
PS1="$PS1"'\w' # current working directory
if test-z "$WINELOADERNOEXEC" ; then
PS1="$PS1"'$(__git_ps1)' # bash function
fi
PS1="$PS1"'\[\033[0m\]' # change color to normal
PS1="$PS1"$'\n' # new line
PS1="$PS1"'$ ' # prompt: always $

Налаштування git-prompt (змінна PS1) взято з попередніх версій Git for Windows.

Зверніть увагу на PS1="$PS1"$'\n'. Вираз $'\n' використовується для виправлення бага
It seems like $() style command substitution for some reason always fails in MSYS2 if a newline is present after it.
2. Документація

Manpages будуть встановлені пакетом git. Для перегляду знадобиться пакет man-db:

pacman-S man-db

І далі, як зазвичай

man git-add

Документація у форматі Html поки відсутній

git add help
fatal: '/usr/share/doc/git/html': not a documentation directory.

Відповідно, можна спробувати самостійно побудувати її, або витягти її з PortableGit архіву і скопіювати %MSYS2_DIR%/usr/share/doc/git/html.

Git 32bit vs. 64bit

В процесі експлуатації 64bit Git виявилося підвищене споживання пам'яті для деяких команд. Наприклад, git-fast-import при конвертації великого репозиторію (близько 5GiB) легко з'їдав всю доступну RAM (при відключеному файлі підкачки це проявляється у вигляді системного повідомлення про те, що програмі не вистачає пам'яті і пропонується закрити програму). Для цього (вже сконвертовані) репозиторію TortoiseGit Log не міг відобразити дерево комітів, а запущений субпроцесс git знову з'їдав всю оперативну пам'ять.

Для 32bit Git такого не спостерігалося, і всі команди, в тому числі в зв'язці з різними GUI і IDE працювали відмінно.

Вирішив поки використовувати Git 32bit.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.