Git server for windows

January 05, 2018 | 3 Minute Read

Н у вот наступил 11111100010 год ии у меня появилось свободная минутка, чтобы написать тут что-то полезное:-)

Случилось так, что понадобился приватный git репозиторий, а покупать VIP аккаунт на github не хотелось, да и политика безопасности компании, для которой разрабатывается проект, не позволяет это делать. По этому было принято решение о развертывании собственного git-сервера. Так как я C# developer, то речь пойдет конечно же о Windows Server и IIS Server. Пользователям Linux скажу, что там установка этого "богатства" еще проще и состоит из пары команд в терминале.

Немного о платформе.

Данный git-server был написан на C# на ASP.NET и представляет собой Web приложение. Все исходные коды доступны тут. Все желающие могут ознакомиться и оценить кривизну кода) А мы поехали дальше -)

Как его ставить?

Для успешной установки нам нужны

  1. Сам сервер на Windows Server 2008 R2/2012/2012 R2/2016 (кто-то сидит на ней?)
  2. Internet Information Services (IIS) 7 или 8
  3. .NET Framework 4.6
  4. visual redist 2012/2015 и CLR
  5. Server дистрибутив

Быстро пробежимся по основным пунктам. У меня стоит Windows Server 2012 R2. И показывать я буду на ней. Для Windows Server 2008 все примерно также. Предполагается, что Виндасервер у вас сконфигурирован и настроен. Если это не так – идите к документации)

IIS Сервер + .NET Framework.

Запускаем Server Manager (диспетчер серверов) -> Manage (Управление) -> Add Roles and Features (Добавить роли и компоненты) …

да да у меня виндосервер на русском.

Выбрать Role-based or Feature-based Installation (установка ролей или компонентов)

Далее выбираем наш сервер

.

В ролях выбираем Web Server (IIS).

.

В компонентах жмякаем на .NET framework 4.5 и на последнем шаге выбираем нужные настройки.

Установка… Потребует перезагрузки сервера. Загружаем .NET Framework 4.6 и ставим его. Все теперь можно ребутиться.

Для любителей консоли…

Git Server

Всё, теперь можно перейти к непосредственно развёртыванию git сервера. Разархивируем содержимое дистрибутива в wwwroot IIS-сервера ( C:inetpubwwwroot ) и даём права учетной записи IIS_IUSERS на модификацию каталога App_Data .

.

Запускаем IIS Manager и конвертируем Git в приложение.

.

После конвертации жмем ActionBrowse (Управление приложением – обзор) и у нас должен открыться сайтик с формой для входа. Теперь он доступен по адресу IP сервераgit в локальной сети. При желании его можно вывезти во внешнюю сеть и вообще делать с ним все что душе угодно!

Настройка.

По стандарту логин пароль для входа adminadmin.

.

В настройках можно указать другой путь для хранения файлов, изменить язык и вообще сделать много полезного)

Можно добавлять новых пользователей и осуществлять контроль видимости репозиториев, выдавать исключительные права пользователям. Также можно объединять пользователей в команды и управлять ими. На пример команде Core Developers будут доступны все ветки в репозитории, а команде Testers только ветка Master.

Я надеюсь данная статья была полезна для вас. Ставьте Like за встроенный редактор кода и подсветку синтаксиса))) Приятного кодинга!

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

Подготовительный этап

На сервере ставим и настраиваем SSH сервер (в моем случае это оказался Bitvise SSH Server, далее все настройки буду описывать относительно него).

Создаем пары public и private ключей для нужных пользователей, в настройках этих пользователей на SSH сервере добавляем им соответствующие public ключи и убеждаемся что разрешена авторизация по ключу.

Если требуется работать с Git из интернета, также пробрасываем соответствующий порт наружу, обычно это 22, но в моем случае получилось 222 по техническим причинам. Проверяем доступность сервера по SSH снаружи и возможность авторизации с ключом, PuTTY в помощь 🙂

Ставим собственно Git (в моем случае это msysgit). Народ предлагает ставить в короткий путь вроде C:/Git, но я ставил в каталог по-умолчанию, все работает. Через Git GUI создаем репозиторий, в моем случае это С:/Webroot/test-git.

Клиентская часть

В моем случае клиенты — тоже windows машины, на них потребуется Git (тот же msysgit) и клиент TurtoiseGit, в моем случае. На клиенте пытаемся склонировать наш репозиторий при помощи Git Clone, вводим урл

где mylogin — это ваш логин для ssh, example.com:222 — адрес сервера и порт (не обязательно), C:/Webroot/test-git — полный путь к репозиторию.

Жмем ОК, ждем, получаем ошибку и отправляемся дальше настраивать сервер.

Настройка Git на сервере

Первым делом идем в переменные окружения (Компьютер -> Свойства -> Дополнительные параметры системы -> Переменные среды). В разделе системные переменные находим PATH и жмем изменить. Убеждаемся что там есть, а если нет, то добавляем три папки:

C:Program Files (x86)Gitcmd;C:Program Files (x86)Gitin;C:Program Files (x86)Gitlibexecgit-core

На всякий случай напомню, что Git у нас стоит в C:Program Files (x86)Git.

Теперь проверяем, что Git доступен. Либо пытаемся еще раз Git Clone на клиенте и получаем другую ошибку, либо заходим по ssh и говорим git прямо и текущей папки, получаем краткий хелп от гита. Если ругается на неизвестную команду, ищем ошибку на предыдущем шаге.

Теперь наша проблема (если посмотреть логи ssh сервера) заключается в том, что git-upload-pack на вход получает путь, обернутый в одинарные кавычки, и естественно, не работает. Нормального решения нет, но есть подпорки, например как описано здесь. Моя версия проделанного:

C:Program Files (x86)Gitcmdgitcmdhelper.sh

прописываем в него

Идем в настройки ssh сервера и для нужного пользователя (или группы) изменяем параметр Exec request prefix на

cmd.exe /c sh gitcmdhelper.sh

ВНИМАНИЕ! после .sh есть пробел! Строка получается вот такая "cmd.exe /c sh gitcmdhelper.sh ", без пробела на конце не будет работать!

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

В глобальном конфиге Git вносим следующие изменения (как советуют на хабре), правим C:Program Files (x86)Gitetcgitconfig

[core]
symlinks = false
autocrlf = true
ignorecase = true
quotepath = false
[i18n]
commitencoding = cp1251
logoutputencoding = cp1251

И, о чудо! Оно теперь работает! Ну по крайней мере мне удалось сделать Pull, Commit и Push.

И последнее — хуки

Поскольку в git-e не принято пушить в основной рабочий репозиторий (для этого есть ряд причин, кому интересно, в гугль), то можно сделать bare-репозиторий, в который будут приходить все пуши, а с помощью механизмов хуков изменения будет забирать рабочая копия.

Итак у нас есть bare-репозиторий C:Webroot est-git в который приходят все комиты и пуши, и рабочая копия C:Webroot est-git.production, на которую настроен document root сервера.

Рабочая копия должна быть "настроена на" bare-репозиторий, для этого в рабочей копии выполним команду

git remote add local C:/Webroot/test-git

результатом станет добавление в C:Webroot est-git.production.gitconfig следующего

.
[remote "local"]
url = C:/Webroot/test-git
fetch = +refs/heads/*:refs/remotes/local/*

Для того чтоб заработали хуки, нужно положить файл с названием действия в папку в bare-репозитории .git/hooks/, в нашем случае это будет

обычно там уже заложен post-receive.sample, его достаточно просто переименовать. А в сам файл вписываем следующее содержимое, которое после получения данных заставит рабочую копию сделать pull:

unset GIT_DIR
cd C:/Webroot/test-git.production
git pull local master

Таким образом мы будем корректно обновлять рабочую копию при каждом push-е в bare-репозиторий.

Вот пара полезных ссылок по теме:

/bar.com.git, it will go to

Поднимать Git на windows, по моему мнению, не самое лучшее решение, если есть возможность все же лучше это сделать на Linux.

Simple

The installation is very easy and you can manage everything from a nice and clean graphical interface.

You can use your current Windows infrastructure and Bonobo Git Server runs on your IIS.

Bonobo Git Server is an open-source project as it is licensed with a MIT License.

The source code is available on github and is very extensible — you can influence its future.

Contribute and make your feature part of the best git server for Windows.

Bonobo Git Server is a free git server for Windows and it should stay free.

However, you can still support the project in multiple ways.

Let me know if you have any question or idea.


[an error occurred while processing the directive]
Карта сайта