Время на прочтение6 мин
Количество просмотров179K
Предисловие или от куда взялась «бредовая» идея ставить Git на Windows
Я работаю в одной не очень большой IT-компании, которая продает свои и чужие программные решения, занимается проектами внедрения, оказывает клиентскую поддержку, проводит обучение и далее все такое в том же духе. До недавнего времени в моей маленькой команде разработки все было неплохо организовано и у нас даже был свой собственный достаточно мощный сервер. Но случилось непредвиденное и по воле злого рока один из серверов фирмы полетел, а руководство решило вместо него в стойку поставить наш сервер отдела разработки. Нам предложили «временно» переехать на любой из серверов общего назначения.
А теперь внимание! Только мы одни во всей фирме работаем на Линуксе, а все остальные сидят исключительно на Windows и сервера у нас тоже под управлением серверных редакций ОС от Билла Гейтса. И если перенос базы Redmine не вызывает особых вопросов, то задача поднять на сервере Windows сервер для Git меня сразу поставила в тупик. Но несколько часов потраченных на поиски дали мне простое работающее решение.
Изучение матчасти
Первым делом я обратился к документации по Git’у, где вычитал следующее:
Git умеет работать с четырьмя сетевыми протоколами для передачи данных: локальный, Secure Shell (SSH), Git и HTTP.
Первый вариант я не стал рассматривать, так как он подразумевает наличие сетевой шары открытой для общего доступа. Допустим, что с помощью групповых политик домена можно обезопасить данные от случайного удаления продавцем-стажером. Но как работать из дому? Ради нескольких «коммитов выходного дня» поднимать VPN?
Читаем далее и видим:
SSH — единственный из сетевых протоколов, предоставляющий доступ и на чтение, и на запись. Два других сетевых протокола (HTTP и Git) в большинстве случаев дают доступ только на чтение, поэтому даже если они вам доступны, вам всё равно понадобится SSH для записи.
Путь к конечной цели уже стал менее туманным: сначала требуется поставить сервер SSH, а далее установить одну из многочисленных сборок Git для Windows (официальную msysgit, Git Extensions, TortoiseGit, QGit и т.д.)
Выбор сервера SSH для Windows
Воспользовавшись поисковиком по сети Internet, я сделал небольшую подборку текущих реализаций SSH под Windows. Не претендую на то, что смог найти все решения в этой области, но самые популярные точно не пропустил. Итак:
Cygwin. В рамках проекта переноса функциональности Linux на Windows был портирован в том числе и OpenSSH. Библиотека проекта cygwin1.dll с реализацией SSH так же используются в большинстве других решений. Простую инструкцию с картинками по установке и настройке можно посмотреть тут. А так же рекомендую к прочтению статью из журнала «Windows IT Pro» № 7 за 2001 год — SSH в Windows.
freeSSHd. Лидер среди упоминается на форумах. Характеризуется как легкий в использовании. Лицензия позволяет бесплатно использовать в коммерческих целях. Нашел инструкцию по установке и настройке на Win2008.
WInSSHD. Самое богатое по функциональности из увиденных мною реализаций. Это хорошее профессиональное решение для обеспечения безопасности. Но для моего гвоздя — это микроскоп. Если кого-то продукт заинтересовал, то у них есть 30-дневная ознакомительная полная версия и возможность бесплатного частного использования.
KpyM Telnet/SSH Server. Плохих отзывов не заметил. Но меня смущает, что их сайт не обновляется с 2009 года, а так же на официальном форуме как-то безжизненно. С другой стороны, если продукт бесплатный и выполняет свою работу, то нет смысла заниматься развитием. Понравилось наличие в их FAQ списка других решений для SSH под Windows. Рекомендую заглянуть.
Copssh. Продукт от норвежской компании ITeF!X, в котором они к windows-реализации OpenSSH добавили красивый GUI-интерфейс администратора и некие «best practices». Именно это решение, более всего рекомендуется в обсуждении поднятия сервера Git под Windows на StackOverflow.
Случайная находка
Собственно под впечатлением ответов на StackOverflow я уже расслабился и решил было пойти проторенной моими предшественниками дорожкой. Но при изучении сайта компании ITeF!X я обнаружил, что у них есть и более подходящий для моих целей продукт — gitwin. Это оказался тот самый требуемый мне сервер Git под Windows.
Я вначале не поверил глазам — если такой чудо продукт существует, то почему о нем до сих пор не трубят на каждом шагу. Ответ нашелся в новостях компании — как оказалось программный продукт только полмесяца назад (11 октября 2013 года) выложили в общий доступ. Точнее на днях выложили бесплатную для использования версию. Платная существовала и раньше, но видимо не пользовалась особым спросом (с января 2012 года на официальном форуме компании всего две созданные темы в разделе gitwin).
Итак, что же собой представляет этот gitwin? В состав свободной версии входят:
- Cygwin версии 1.7.25
- OpenSSH версии 6.3
- Git версии 1.8.4
- Инсталятор от Itefix
На сайте целый раздел посвящен установке пакета. Кроме описания словами процесса «запуск инсталятора» -> «далее» -> «далее» -> «готово», представители компании не поленились записать все это еще на видео и выложили на YouTube. Не совсем понятно зачем это сделано и самое главное не понятно для кого?
Еще один раздел выделили для описания использования. Тут описали активацию нового пользователя для доступа по SSH, создание пары ключей и пустого репозитория. И так же кроме описания текстом дают записанный обучающий ролик:
Установка, настройка и тестирование сервера Git
Я установил на наш сервер gitwin редакции «free edition» и могу поделится только этим опытом.
1. Начинаем со скачивания инсталятора со странички продукта.
2. Запускаем инсталятор и нас спрашивают куда устанавливать продукт. Я оставил по-умолчанию в «C:\Program Files (x86)\ICW». Зачем может понадобится менять путь? Дело в том, что этот каталог станет корнем для линуксовых утилит и домашний каталог пользователя git тоже будет создан тут же «C:\Program Files (x86)\ICW\home\git\». Если есть предчувствие проблем с правами доступа, то можете поменять на менее проблемный для вас каталог.
3. В процессе установки выводятся сообщения о создании двух пользователе «SvcCOPSSH» и «git». Под первым пользователем будет работать служба «OpenSSHServer», а второй нужен собственно для обслуживания репозиториев. Пароли к этим пользователям можно узнать в конце процесса установки, если нажать на «Show details». Советую по правому щелчку скопировать вывод в буфер и сохранить на всякий случай.
3.1. Перепроверка состава пользователей показала, что инсталятор втихую создал еще одного пользователя — «sshd» с описанием «copSSH privilege separation user» и сам же отключил его. Не понятно и подозрительно…
4. Скорее всего из-за редакции «free edition» дальнейшие шаги отличались от описанных на сайте. Вместо консоли администрирования в меню Пуск/copssh поместили два пункта «01. Activate a user» и «02. Deactivate a user». Но суть процесса от этого не изменилась. Запускаем «01. Activate a user» и указываем пользователя для активации (в моем случае все тот же git), выбираем командную оболочку (выбор из bash, sftponly и false) и ставим опциональные галочки. Тут читаем внимательно:
4.1. Если нам нужна пара ключей, то оставляем включенную по-умолчанию «Create keys for public key authentication». При парольной авторизации можете снять…
4.2. Если у пользователя планируется использование его родного пользовательского каталога из C:\Users\ (или может у кого-то до сих пор C:\Documents and Settings\) тогда оставляем включенные по-умолчанию галочки «remove copssh home directory if it exists» и «Create link to user’s real home directory». Я рискнул их снять и таким образом все репозитории у меня будут запрятаны глубоко в системном каталоге Program Files.
5. После активации пользователя и создания ключей можем протестировать всю систему на работоспособность. Выбираем в меню Пуск/copssh пункт «03. Start a Unix BASH Shell» и создаем пустой репозиторий. Я не стал блистать остроумием и повторил команду с официального сайта:
$ git init —bare /home/git/repo-a
Initialized empty Git repository in /home/git/repo-a/
6. Далее тестирование переехало на мой рабочий ноут. Я успешно склонировал пустой репозиторий, закинул в него несколько файлов и запушил назад. Проблем не возникло. Перешел в другой каталог и снова склонировал репозиторий — на этот раз он был уже не пустой и содержал мой коммит с файликами. Таким образом с моей рабочей станции различия между работой с репозиторием Git на предыдущем сервере Ubuntu и на новом сервере Windows замечено не было!
Заключение
Удачно найденный gitwin оказался именно тем решением, которое я искал — запускается под Windows и создает иллюзию для пользователей, что они работают с полноценным удаленным репозиторием. Глюков пока не заметил. Но если обнаружу, то обязательно дополню данную статью.
Надеюсь, что собранные материалы окажутся кому-нибудь полезными. И хочу пожелать не боятся потратить несколько часов на поиски, если вы не уверены, что в вашей голове наиболее актуальная информация. Ведь если бы я изначально зашел на StackOverflow и выполнил все по детальному пошаговому руководству от Тима Дэвиса, то не узнал бы о существовании более короткого пути, когда вся инфраструктура поднимается и настраивается буквально в десяток кликов мышкой. Успехов!
Послесловие. Истории успехов от хабраюзеров
Я подобно Сократу с каждым новым квантом знаний понимаю как еще много того, чего я все еще не знаю. В комментариях коллеги описывают положительный опыт на заданную мною тему, который грех игнорировать. Итак:
A1lfeG вместе со своей командой далеки от Linux’а, но тем не менее ихняя установка центрального репозитория Git’а была довольно простой. В этом им помог продукт SCM Manager.
dshster делится опытом по успешной установке на сервер исключительно msysgit. Если честно, то я читал это сообщение в Q&A, но это не мой случай. Инструкция больше касается использования Bitbucket и Github. Для общего использования в локальной сети предлагается общая папка, а для просмотра репозитория встроенный веб-сервер. Отмечу, что начиная с релиза 1.8.4 веб-сервер и часть других утилит удалена: «Some commands are not yet supported on Windows and excluded from the installation; namely: git archimport, git cvsexportcommit, git cvsimport, git cvsserver, git instaweb, git shell»
IamKarlson хорошо отзывается о решении Bonobo Git Server, которое используется у него на работе. Как плюс для себя отмечу использование веб-сервера IIS, который у нас уже работает.
Введение
В этой инструкции покажем, как установить Git на Windows, и поможем выбрать правильные параметры при установке. Затем создадим репозиторий и зафиксируем в нем изменения. Все это поможет вам сделать первые шаги в освоении Git.
Что такое Git и зачем он нужен
Git — это одна из самых популярных систем контроля версий (VCS). Такие системы помогают разработчикам хранить и версионировать исходный код приложений, настройки систем и другие текстовые файлы. И хотя ничего не мешает использовать VCS в других областях, чаще всего они применяются именно в IT.
Каждое состояние файлов в Git можно зафиксировать (сделать коммит), причем это навсегда останется в истории репозитория. Поэтому можно в любой момент посмотреть историю изменений файлов, сравнить различные версии и отменить отдельные изменения.
Также Git упрощает ведение параллельной разработки несколькими членами команды. Для этого используется ветвление. Условно можно сказать, что в Git-репозитории есть одна основная ветка, в которой хранится текущая стабильная версия исходного кода. Когда разработчик хочет изменить этот код, он «откалывает» себе отдельную ветку от основной и работает в ней. Когда работа закончена, он «вливает» изменения в основную ветку, чтобы его доработками смогли воспользоваться другие члены команды.
На самом деле все это описание довольно грубое, и по работе с Git можно написать не одну статью. На официальном сайте Git есть бесплатная электронная книга, в том числе она переведена на русский язык. А в этой статье мы сосредоточимся на установке Git в Windows и его первоначальной настройке.
Установка Git в Windows
Переходим на официальный сайт Git, в раздел загрузок. Мы увидим несколько вариантов установки: разные разрядности, портативная версия и даже установка из исходников. Мы выберем Standalone-версию, для этого проще всего нажать ссылку Click here to download, она всегда ведет на самую актуальную версию. Запускаем скачанный файл.
Выбор компонентов. Первый экран — выбор компонентов для установки. Если вам нужны дополнительные иконки на рабочем столе, или если вы хотите, чтобы Git ежедневно проверял наличие новой версии, — отметьте соответствующие опции. Остальные параметры лучше оставить по умолчанию.
Текстовый редактор по умолчанию. Необходимо выбрать редактор, который будет использовать Git — например, когда вы будете писать сообщение для коммита. Это не обязательно должен быть редактор, в котором вы планируете писать исходный код.
По умолчанию в установщике выбран Vim — консольный текстовый редактор, который для многих может показаться сложным в освоении. Если вы не знакомы с Vim и при этом хотите именно консольный редактор — выберите nano. Если у вас уже установлен какой-нибудь текстовый редактор — выбирайте его. Мы для примера будем использовать VSCode.
Название первой ветки. Тут нужно выбрать, как Git будет называть первую ветку в каждом репозитории. Раньше такая ветка всегда называлась master, но со временем это стало напоминать о временах рабства, и многие проекты и компании стали переименовывать ветки в своих репозиториях. Поэтому разработчики Git добавили эту опцию, чтобы название первой ветки можно было изменить. Мы будем придерживаться старого поведения и оставим название master.
Способ использования Git. Первая опция сделает Git доступным только из командной строки Git Bash. Это не очень удобно, потому что не позволит пользоваться Git-ом из других оболочек или интегрировать его с редактором кода. Вторая опция самая оптимальная (ее мы и выберем) — она позволяет работать с Git-ом из разных оболочек и интегрировать его с другими приложениями. Третья опция кроме установки Git также «перезапишет» некоторые системные команды Windows аналогами из Unix, и эту опцию нужно выбирать только если вы точно понимаете, что делаете.
Выбор SSH-клиента. Изначально Git поставлялся со встроенным SSH-клиентом, но недавно появилась опция, где можно использовать внешний клиент. Если у вас уже что-то установлено на компьютере — можете выбрать вторую опцию. Мы же остановимся на первой, так как предварительно ничего не устанавливали.
Выбор SSL/TLS библиотеки. По умолчанию Git будет использовать свою OpenSSL библиотеку с заранее определенным списком корневых сертификатов. Обычно этого достаточно, но если вам нужно работать со внутренними репозиториям внутри компании, которые используют самоподписанные сертификаты, выберите вторую опцию. Тогда Git будет использовать библиотеку и сертификаты из вашей операционной системы.
Символы перевода строки. Существует два основных способа формирования конца строки в файлах — CRLF и LF. Первый используется в Windows, второй — в Unix-like системах. Первая опция позволяет извлекать файлы из репозитория в Windows-стиле, при этом отправлять файлы в репозиторий в Unix-стиле. Мы рекомендуем использовать этот вариант, потому что он лучше всего подходит для кросс-платформенной команды, когда над одним кодом могут работать разработчики на разных ОС.
Эмулятор терминала. Эмулятор, который будет использоваться в командной строке Git Bash. MinTTY — удобный вариант, поэтому он выбран по умолчанию. Встроенный эмулятор CMD не очень удобен, у него есть некоторые ограничения, поэтому выбирайте его, только если делаете это осознанно.
Стратегия git pull. Первая опция будет пытаться обновить историю коммитов без создания коммитов слияния. Это самый оптимальный и часто используемый вариант, оставим его.
Credential Manager. Установка этого параметра позволит Git запоминать логины и пароли для подключения к удаленным репозиториям (например, GitHub, GitLab или корпоративное хранилище) и не вводить их постоянно.
Дополнительные настройки. Кэширование позволит ускорить работу Git, эту опцию рекомендуем оставить. А вот символические ссылки нам не нужны.
Экспериментальные настройки. Эти опции еще не переведены в стабильную стадию, поэтому их использование рекомендуется, только если вы точно понимаете, что делаете. Мы не будем ничего отмечать.
Git установлен и готов к работе.
Установка в различные дистрибутивы Linux
Также коротко покажем, как можно установить Git в различные дистрибутивы Linux. Как правило, самостоятельно скачивать ничего не нужно, достаточно воспользоваться встроенным в дистрибутив пакетным менеджером.
Debian
pt-get install git
Ubuntu
add-apt-repository ppa:git-core/ppa # apt update; apt install git
Fedora 21
yum install git
Fedora 22+
dnf install git
Gentoo
emerge --ask --verbose dev-vcs/git
Arch Linux
man -S git
OpenSUSE
ypper install git
Mageia
rpmi git
FreeBSD
pkg install git
OpenBSD
g_add git
RHEL, CentOS, Oracle Linux и др.
Как правило, пакетный установит довольно старую версию Git, поэтому рекомендуется собирать Git из исходных кодов, или воспользоваться сторонним репозиторием IUS Community.
Первоначальная настройка и создание репозитория
Перед началом работы с Git нужно указать свое имя и email, которые в дальнейшем будут записываться в историю изменений при каждом коммите. В будущем это позволит понять, кто именно внес те или иные изменения.
Откроем любое из приложений — Git Bash или Git CMD. Первое — это командная строка в стиле Linux, второе — командная строка в стиле Windows. Выбирайте то, что вам ближе. Мы выберем Git Bash и выполним две команды:
git config --global user.email "git-user@selectel.ru"
git config --global user.name "Selectel Git User"
Теперь Git полностью готов к работе. Давайте создадим репозиторий и зафиксируем в нем первое изменение (сделаем коммит). Для начала создадим каталог для будущего репозитория и сразу перейдем в него:
mkdir first-repo && cd first-repo
Создаем новый репозиторий в этом каталоге:
git init
Увидим ответ:
Initialized empty Git repository in C:/Users/git_user/first-repo/.git/.
Это означает, что в директории создан новый репозиторий. Далее создадим текстовый файл, назовем его README.md, и напишем в нем любой текст. Но сам по себе этот файл не попадет в следующий коммит. Мы должны проиндексировать изменения, то есть явно сказать Git-у, что этот файл нужно учитывать в следующем коммите:
git add README.md
Далее введем команду:
git commit
Откроется текстовый редактор, который мы выбирали на этапе установки Git. Тут нам нужно ввести комментарий для коммита, то есть кратко описать изменение, которое мы сделали. Мы напишем такой комментарий:
Обратите внимание, что Git автоматически добавил небольшую подсказку в это окно. При этом она не войдет в коммит, потому что в начале строки стоит символ решетки, и Git проигнорирует ее. Но она может быть полезна для дополнительной проверки: мы видим название текущей ветки и список файлов, которые войдут в коммит.
Сохраним файл и закроем редактор. Увидим примерно следующее сообщение:
[master (root-commit) 2b8f7a5] Add readme file
1 file changed, 3 insertions(+)
create mode 100644 README.md
Мы успешно сделали первый коммит.
Работа с Git в визуальном интерфейсе
Сам по себе Git — это утилита командной строки. Но не всем может быть удобно запоминать и писать команды в терминале, поэтому часто разработчики пользуются графическим интерфейсом. Есть несколько вариантов:
- Встроенный GUI. В базовой установке Git есть две простые утилиты: gitk и git gui. Но у них довольно старый интерфейс и пользоваться ими не всегда удобно.
- Отдельные графические утилиты. Они могут быть понятны и красивы, но неудобны тем, что код нужно писать в одной программе, а для работы с Git нужно переключаться в другую. Примеры таких программ: GitKraken, Sourcetree, GitAtomic. Большой список таких клиентов есть на официальном сайте Git.
- Встроенные в IDE или текстовый редактор. В большинстве популярных редакторов кода или IDE уже есть поддержка Git. Как правило, ничего дополнительно настраивать не нужно. Мы рассмотрим именно такой вариант на примере редактора VSCode.
Откроем директорию с репозиторием в редакторе VSCode. Внесите любое изменение в файл README.md и сохраните изменения. Обратите внимание, что в левой части редактора кое-что изменилось:
- Файл README.md подсветился желтым цветом, а рядом с ним появилась буква M (означает Modified — изменен).
- На панели Source Code появилась цифра 1, означающая, что есть одно изменение, которое можно зафиксировать.
Перейдем на панель Source Code. Слева находится список файлов, которые были изменены. Если кликнем на файл, то увидим какие именно изменения мы внесли: в этом случае добавили новую строчку This is the second commit.
Теперь давайте зафиксируем наши изменения. Рядом с названием файла нажмем на «плюс», чтобы проиндексировать его. Это аналогично команде git add, которую мы выполняли ранее. Затем в поле Message внесем комментарий и нажмем кнопку Commit. Это аналогично команде git commit.
Поздравляем, вы сделали уже два коммита в свой репозиторий!
Заключение
Итак, мы рассмотрели процесс установки Git под 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 приложение. Все исходные коды доступны тут. Все желающие могут ознакомиться и оценить кривизну кода) А мы поехали дальше -)
Как его ставить?
Для успешной установки нам нужны
- Сам сервер на Windows Server 2008 R2/2012/2012 R2/2016 (кто-то сидит на ней?)
- Internet Information Services (IIS) 7 или 8
- .NET Framework 4.6
- visual redist 2012/2015 и CLR
- 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 и ставим его. Все теперь можно ребутиться.
Для любителей консоли…
Start /w pkgmgr /iu:IIS-WebServerRole;
IIS-WebServer;
IIS-CommonHttpFeatures;
IIS-StaticContent;
IIS-DefaultDocument;
IIS-DirectoryBrowsing;
IIS-HttpErrors;
IIS-HealthAndDiagnostics;
IIS-HttpLogging;
IIS-LoggingLibraries;
IIS-RequestMonitor;
IIS-Security;
IIS-RequestFiltering;
IIS-HttpCompressionStatic;
IIS-WebServerManagementTools;
IIS-ManagementConsole;
WAS-WindowsActivationService;
WAS-ProcessModel;
WAS-NetFxEnvironment;
WAS-ConfigurationAPI
Git Server
Всё, теперь можно перейти к непосредственно развёртыванию git сервера. Разархивируем содержимое дистрибутива в wwwroot
IIS-сервера (C:\inetpub\wwwroot
) и даём права учетной записи IIS_IUSERS
на модификацию каталога App_Data
.
Запускаем IIS Manager и конвертируем Git в приложение.
После конвертации жмем Action – Browse (Управление приложением – обзор) и у нас должен открыться сайтик с формой для входа. Теперь он доступен по адресу IP сервера\git
в локальной сети. При желании его можно вывезти во внешнюю сеть и вообще делать с ним все что душе угодно!
Настройка.
По стандарту логин пароль для входа admin\admin.
В настройках можно указать другой путь для хранения файлов, изменить язык и вообще сделать много полезного)
Можно добавлять новых пользователей и осуществлять контроль видимости репозиториев, выдавать исключительные права пользователям. Также можно объединять пользователей в команды и управлять ими. На пример команде Core Developers
будут доступны все ветки в репозитории, а команде Testers
только ветка Master.
P.s.
Я надеюсь данная статья была полезна для вас. Ставьте Like за встроенный редактор кода и подсветку синтаксиса))) Приятного кодинга!
If you’ve been wondering if you can create a Local GIT Server on Windows like GitHub, Bitbucket, or even DevOps Azure, well I was too. This is the hard part of being a developer that is learning through the help of online resources. You need to devote a lot of time to research just to get what you are looking for.
- I. Initialize a Bare repository using CLI
- II. Clone and push to the Remote repository
- III. Configure a Local Git Server using Bonobo
- IV. Migrate a Remote Git Repository to a new Git Server
- Summary
This time I will give you a break and share a way to create a git server repository on your local Windows machine.
Before we start we need to install git bash for windows. You can download it here.
I. Initialize a Bare repository using CLI
A bare repository is a Git repository that does not have a working tree. A working tree is a directory in which all the project files reside. A Bare repository is used as a Remote repository that contains logs or history of all the changes on the repository branch that is pushed to this bare repository.
Let’s say I have two folders here, a Repository folder and a Clone folder. The Repository folder would act as our Remote Git Repository while the Clone folder would be our local machine or the client. Follow the steps below to create a Bare Repository.
- Add a Bare repository inside Repository folder. Open the Repository folder then run git bash. Use the git command below.
git init --bare test.git
This will initialize a bare repository. See the image below.
This time you have created your local Remote Repository. Let’s clone and commit to this test.git repository.
II. Clone and push to the Remote repository
From the previous step, we created a remote repository inside the Repository folder which in my case my repository URL would be “C:\Users\user\Desktop\Repository\test.git”. For this location to work you need to replace the backslash to forward slash like this ” C:/Users/user/Desktop/Repository\test.git“.
- Open the clone folder which represent our client machine. Change your directory to the clone folder. Then execute the git command below.
git clone C:/Users/user/Desktop/Repository/test.git
2. This creates a test folder inside the Clone folder. Change directory to the test folder.
This is what my Clone folder looks like.
3. Now, let’s try to push some files. I created a readme.txt inside the test folder then open the git bash again and execute the command below. Make sure that you are inside the test folder.
3.1 Check any changes from a local repository.
git status
3.2 Add all changes or stage all files for commit
git add .
3.3 Commit all changes
git commit -m "initial commit"
3.4 Push file to the remote repository which in this case is the Bare repository inside the Repository folder.
git push
5. On your remote repository which is the test.git inside the Repository folder, you can check the last commit using this command.
git log
This command will output the history of the commit that you push on this repository branch. See the image below.
Now, to share this local remote repository you can share this folder and use your local network IP address. In my case, my remote repository URL would be like this \\192.16.1.10\Repository\test.git
III. Configure a Local Git Server using Bonobo
We have set up a local git repository using CLI on the steps above, This time let’s use a Web Application called bonobo git server. Bonobo git server provides an easy management tool and access to your git repositories that are self-hosted on your server using IIS.
- Download Bonobo git server here.
- Extract the file inside your IIS root directory. “C:\inetpub\wwwroot”
3. Open IIS then Convert the folder to Application
4. Make sure that you have given IIS users a sufficient right to modify files under the App_Data folder. See the image below.
5. Browse the newly created application and log in using the default user account.
Username: admin
Password: Admin
You have now your windows base Git Server that you can share with your team.
IV. Migrate a Remote Git Repository to a new Git Server
Now, if you want to migrate your existing Remote repository to a new Git server. Do the steps below. For this tutorial I’m going to transfer test.git under the Repository folder to our newly installed Bonobo Git Server.
- Open your local Bonobo Git server(http://localhost:8080/Bonobo.Git.Server/Repository/Index).
- Create a new repository. I named it Test. See the image below.
3. Open the newly created repository and copy the URL. This is where we will transfer the test.git Repository. See the image below.
4. If your Remote repository is in your local windows you can directly push the repository using a “git clone –mirror <new URL>”. But if not, here’s a way you can do that. Use the Git CLI command below to clone your remote repository.
git clone --mirror C:/Users/user/Desktop/Repository/test.git
This will mirror your remote repository locally.
5. Cd to the Clone Repository.
cd test.git
6. Set your origin URL to the new Bonobo Repository that you created.
git remote set-url origin http://localhost:8080/Bonobo.Git.Server/Test.git
7. Then you can simply push the mirror Repository like this.
git push --mirror origin
8. You will be prompted to input your git credential. Just use the default bonobo server password(uname:admin, pass:admin).
See the image below for the actual command that I used on this example.
Now, if you move back to your bonobo Test Repository. You will see the branch and committed changes from your old remote repository.
To share this Bonobo Git Repository inside your local network you can configure IIS to user IP address. Like this.
Visit this link to configure your IIS to be accessible inside your local network.
Summary
We have learned from this article two ways to Create a Local GIT Server that can be hosted on a Windows machine. We can initialize a bare repository and you can share the folder and give it to someone inside your network for code collaboration. Or we can also use a bonobo git server to easily host and create a git repository. We have also presented a way to migrate or transfer your existing remote repository to another Git server.
Hopefully, this tutorial will be able to give you an idea of how you can collaborate with your teammates inside your local network.
KEEP CODING!!
1. What is Git Server?
It is a server installed Git service. In which, Git is a distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
In this article, I will guide you step by step to setup a Git Server on Windows with OpenSSH.
2. What is Remote & Local Repository?
Remote Repository is a repository on a server where source codes from developers are centralized. While Local Repository is a repository cloned (copied) from Remote Repository to developer’s computer (client).
The following picture will illustrate how repositories working.
3. Required tools
+Win32 OpenSSH
+Git for Windows
4. Install Git for Windows
Go to Git for Windows, select & download suitable version for your Windows (32-bit or 64-bit).
Installing it with option «Use Git and optional Unix tools from the Command Prompt» and «Use the OpenSSL library«.
After installing, open Windows cmd or Git bash run below command to check if it is installed ok:
git —version
5. Install OpenSSH
Go to Win32 OpenSSH, select & download a suitable version for your Windows. Unpack it to a folder (e.g. C:\OpenSSH).
Run Windows PowerShell as Administrator right, change to the OpenSSH folder, then run below command to install:
powershell -ExecutionPolicy ByPass -File install-sshd.ps1
See the following picture for more details:
Open Windows Services then set OpenSSH SSH Server & OpenSSH Authetication Agent to Automatic and start them.
Because OpenSSH use port 22 by default, so you must open this port on your Windows firewall. You can change the SSH service port value (e.g. Port 1235) in its config file: C:\OpenSSH\sshd_config_default. If you change the port, remember open the firewall for new port and restart SSH services.
To check if the OpenSSH server is working, on a client computer download PuTTY tool and connect to the SSH server via its IP and a Windows user on the server.
In case your client computer already had ssh client, you can use Windows cmd to connect to the server. If your client doesn’t have, you can install Win32 OpenSSH on the client. See below picture for sample of checking SSH connection.
Every time you connect to the SSH server, it requires to input password. To avoid password, you can use Public & Private keys for authenticating. Let generate these keys on your clients by using ssh-keygen tool, for example:
ssh-keygen -t rsa -b 4096
It will generate 2 files: id_rsa and id_rsa.pub in SSH folder of Windows user on the client (C:\Users\<username>\.ssh). Remember let passphrase as empty (key enter) when it asks you key in, it will help you skip to enter passphrase every time you connect to the server. Copy id_rsa.pub file to the SSH folder of Windows user on the server (C:\Users\<username>\.ssh) and rename it to authorized_keys. Then on the server, right click on this file and make sure removing rights of all users except Administrators and SYSTEM, for example:
On the server, verify if file C:\ProgramData\ssh\sshd_config (file config of SSH service) has below lines uncommented:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
If not, let uncomment them then restart OpenSSH SSH Server. Try again with ssh username@computername_or_IP, it will login to SSH Server without entering any password/passphrase.
6. Create Remote Repository (central repo)
On the server, for existing source folder, you can run below commands from Windows cmd:
cd D:\mygit\my_central_repo
git init —bare
Or create new central repo by command:
git clone —bare D:\mygit\my_central_repo
On the client, create a folder and add remote repository into:
cd E:\local_repo
git init
git remote add origin hunglv@192.168.10.101:D:/mygit/my_centro_repo
In which origin is a name standfor remote repo. Next you must run 2 below work arround commands to set powershell as default Shell in registry:
git config —local remote.origin.uploadpack «powershell git-upload-pack»
git config —local remote.origin.receivepack «powershell git-receive-pack»
Now you can fetch remote repo to your local repo for working:
git fetch origin
OK, you have done the setup for Git Server on Windows with OpenSSH, Remote and Local Repository. Next is common Git commands that are often used.
7. Basic Git commands
git fetch <remote name> <branch>: fetching repo versioning data from remote repo to local repo
git pull <remote name> <brannch>: get all (included new files & merge updated files) from remote repo to local
git add <file>: add new file to local repo
git commit -m <«message»>: commit all updates / news to your local repo
git push <remote> <branch>: push all updates / news from your local repo to remote repo
git remote -v: see remote repo linked
git status: check status / changes in local repo
The end for this article. Hope you can start your projects on Git easily.
Any comment is welcome. Bye!