Git сервер на raspberry pi

Setting up Raspberry Pi as a git server

Update 1 June, 6th: I have installed gitea to test it out as well, as per comments. It is awesome! Their docs are pretty good to get you started, if you’d like a front end. If you don’t continue on with the article. Gitea Docs

Update 2 June, 8th: I setup my UPS APC 600va with my pi, installed apcupsd utility, edit conf file, and use data port to usb. This way the pi will do a proper shutdown in the event of power loss, and/or surges. Make sure you set is as a service on boot. guide here, apcupsd docs)

I’ve noticed this tweet a few days ago, and sparked some interest in how to setup raspberry pi as a git server. This way if Github takes a crap or whatever you still have a full working git project in another place. Github CEO responded that the repo was restored, I don’t think he would reply to me if I lost a repo lol but nevertheless github team was all over it and I give them props.

I always have pi’s and arduinos or microcontrollers available at home so might as well put my pi for some real work. I do have a handful of repo’s that I’ve put some good work so having another full backup would be nice.

Strap on you are in for a full ride, it took me a few hours but that’s because I had some minor issues here and there so in this guide I hope that you’ll be up and running a lot more quicker than me. Feel free to replace vim with nano : )

Note: I am no linux nor git expert, so let me know if I did any mistakes.

Things you will need

  • Raspberry Pi 3
  • USB thumbdrive if you want data on a thumbdrive rather than Pi SD card
  • A No-IP Account if you have ISP dynamic IP
  • Just a little bit of technical know how

Overview of the Guide

  • SSH Enable
  • Static IP
  • SSH Port Change (Optional)
  • Router Port Forwarding
  • DNS server (Optional)
  • USB Mount (Optional)
  • Clone repository or init new repo
  • Give git directory pi:pi permissions
  • Add receive.denyCurrentBranch updateInstead
  • Add pushurl to origin
  • Test your setup, and have some coffee after all this hard work!

Enable SSH

By default SSH is disabled, once you enabled default port is 22.

  1. Enter sudo raspi-config in a terminal window
  2. Select Interfacing Options
  3. Navigate to and select SSH
  4. Choose Yes
  5. Select Ok
  6. Choose Finish

Static IP

A static IP is needed to be able to configure port forwarding. Replace with your own pi address ip on terminal run ifconfig

SSH Port (Optional)

Changing the port is not needed but is recommended if you have another machine on your network you SSH into.

After changing the port

Router Port Forwarding

This is something you might need to google to get clear instructions for your router. Could also download your router manual. Go to a browser enter your router IP, credentials, advanced settings, and look for port forwarding. We need a TCP service, give it a name, your pi IP, and port. Make sure you can SSH into it locally, before you attempt to try remote SSH.

Here’s an example for the Nighthawk

DNS Setup (Optional)

Most ISP change your router IP, mine is every couple of weeks or so. And so to be able to push changes to a repo on the pi you need a static address since you can’t rely on your changing router ip. Sign up for an account at NoIP and go through the steps.

Once you have your dns address, take that into your router. If your router doesn’t have the ability for a dns address then download one of the utilities from NoIP which can update your router IP but be aware that utility will need to be running on a machine on your network.

Also for me I couldn’t use my custom dns address from work, so I still had to use my router IP.

USB Drive Mount

In case you want to save your git repositories on a thumbdrive or hdd you’ll need to mount it first. Otherwise skip this part.

lsblk or sudo fdisk -l will show disk devices. Mine is sda on partition sda1 as shown below. Note that lsblk will also show the mountpoint if is already mounted.

To mount the usb:

Lastly check whether is mounted by running lsblk or cat /proc/mounts

Formating: WARNING: Ensure you are on the correct drive. Unplug, and plug your drive and check brand, and size with cat /var/log/messages | tail -n 50

In case you want to format your USB follow the below steps:

  • sudo fdisk /dev/sda1
    • m, for help
    • q, for exit
    • d, to delete partitions, repeat if there are more i.e. sda2, sda3, etc.
    • n, to create new partitions, I did p, and hit enter 4 times.
    • w, to finish

Clone a repo

My thumbdrive git directory is /media/usbstick/git/ I would assume most people are good with git on this site, but I’ll try to give all steps.

Cloning Private Repo

Generate SSH Key, when done just cat to it, and paste on github:

Directory permissions

Your folder might need permissions for pi user.

Add receive.denyCurrentBranch updateInstead

You can skip this step if you’d like to see the error below on your machine or if you know another way to make remote push work:

receive.denyCurrentBranch updateInstead

If you don’t configure it this way, you’ll get the below error.

This options was added in Git 2.3, and it makes the server update its working tree if it is clean.

Add pushurl to origin

You can also go into .git folder and do it on the config file, change path as needed, pi is the user so change if needed:
pushurl = ssh://pi@yourIp:yourPort/media/usbstick/git/yourRepo/.git

You can also add another remote if you’d like, is up to you but this works by pushing to both github, and the pi with one command.

Test your setup

Hopefully you have made it through, and you can push your changes to your pi by now.

On your remote computer, make a small change, and commit, then push. You will need to enter your pi password, and I hope is not the default if it is please change it:

SSH into your pi, and do the usual to make sure your pi repo is up to date:


There are way too many issues you can get based on your experience with unix based systems, routers, and git but if you get an error someone should be able to help you here or on google. Nevertheless here are some issues that you might likely hit along the way.

If you can’t SSH into your pi from remote, you most likely have not configured the port forwarding correctly or have firewall issues. If you get the password prompt then you know you are at least connecting to your pi.

If git push stops after total, then is most likely a folder read/write persmission issue, make sure your user is listed for the git directory you can check this by doing ls -la if you see your username for each file, then this is most likely not an issue unless you have the wrong user on the push url rule, the users must match.


I am quite happy with this setup, I don’t have to do much to keep adding repos, all is needed for the next one is to clone it, add the receive.denyCurrentBranch updateInstead rule, and add the set url on my remote setup.

What do you think? Will you give it a try?
Any questions concerns, let me know.


Как установить Git на Raspberry Pi

Git — это распределенная система контроля версий, которая сегодня используется большинством команд разработчиков программного обеспечения. Это позволяет вам отслеживать изменения вашего кода, возвращаться к предыдущим этапам, создавать ветки и сотрудничать с другими разработчиками.

Первоначально Git был разработан Линусом Торвальдсом , создателем ядра Linux.

В этом руководстве объясняется, как установить Git на Raspberry Pi. Мы предполагаем, что на Raspberry Pi установлен Raspbian .

Для большинства людей самый простой и рекомендуемый способ установить Git — это установить его с помощью инструмента управления пакетами apt .

Если вы хотите установить последнюю стабильную версию Git из исходного кода, прокрутите вниз до раздела « Установка Git из исходного кода » этого руководства.

Установка Git с Apt

Пакет Git включен в репозитории Raspbian по умолчанию.

Выполните следующую команду от имени пользователя root или пользователя с привилегиями sudo, чтобы установить Git на Raspberry Pi:

Введите команду ниже, чтобы проверить установку:

На момент написания этой статьи текущая версия Git, доступная в репозиториях Raspberry Pi, — 2.20.1 .

Это оно! Вы установили Git и можете начать его использовать.

Установка Git из исходного кода

Компиляция Git из исходного кода позволяет вам установить последнюю версию Git и настроить параметры сборки. Однако вы не сможете поддерживать установку Git через менеджер пакетов apt .

Начните с установки зависимостей, необходимых для сборки Git на Raspbian:

После завершения установки откройте браузер, посетите зеркало проекта Git на GitHub и скопируйте URL-адрес ссылки на последний выпуск, который заканчивается на .tar.gz :

В настоящее время самая последняя стабильная версия Git — 2.24.1 , но для вас она может быть другой.

Мы собираемся загрузить исходный код Git в каталог /usr/src , который является обычным местом для размещения исходных файлов. Перейдите в каталог :

Загрузите файл tar.gz как git.tar.gz по ссылке, которую вы скопировали ранее:

Затем извлеките архив и перейдите в исходный каталог git, набрав:

Выполните следующие две команды для компиляции и установки Git:

Введите git —version чтобы проверить установку:

Позже, когда выйдет новая версия, для обновления Git загрузите архив и повторите процесс сборки.

Настройка Git

Теперь, когда на вашем компьютере с Raspberry Pi установлен Git, рекомендуется настроить вашу личную информацию. Следующие команды установят ваше имя фиксации и адрес электронной почты:

Чтобы убедиться, что вы правильно указали информацию в Git, введите:

Параметры конфигурации хранятся в файле

Если вы хотите внести дополнительные изменения в глобальную конфигурацию Git, используйте команду git config или отредактируйте файл


Для установки Git на Raspberry Pi достаточно выполнить одну команду apt . Если вы хотите использовать последнюю версию Git, вам нужно будет собрать ее из исходного кода.

С Raspberry Pi вы можете настроить собственный сервер Git в своей локальной сети.

Если вы новичок в Git, ознакомьтесь с книгой Pro Git , которая является отличным ресурсом для изучения того, как использовать Git.

Оставьте комментарий ниже, если столкнетесь с проблемой или у вас есть отзыв.


Настройка Raspberry Pi в качестве Git-сервера

В недавней статье Джереми представил Raspberry Pi , крошечный компьютер размером с вашу руку. В этой статье он приводит еще один пример впечатляющего использования этого удивительного устройства.

Управление версиями проекта полезно. Даже если ваш проект является частным, всегда хорошо иметь возможность восстановить старую версию, если (например) новая по какой-то причине сломана.

Для управления версиями проекта мы можем создавать новую папку для каждой новой версии, но сегодня у нас есть отличные инструменты, которые позволяют нам работать намного лучше.

Одним из таких инструментов является Git . Git отлично подходит для управления версиями проекта, независимо от того, работаете ли вы над ним в одиночку или нет. Этот инструмент можно использовать на одном компьютере без каких-либо проблем. Однако, если вы хотите поделиться своим кодом между несколькими компьютерами, вам понадобится сервер Git. Это то, что мы будем строить в этом уроке.

Сначала я объясню, что мы будем строить, и зачем нам это нужно. Затем мы увидим, как конкретно построить наш сервер с Raspberry Pi. Наконец, мы увидим, как использовать наш сервер.

Что мы хотим сделать?

Git сервер?

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

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

С этим сервером процесс будет следующим:

  1. Вы модифицируете свой код
  2. вы отправляете свои изменения на сервер
  3. на другом компьютере вы или кто-либо другой загружает изменения с сервера
  4. новые изменения сделаны с этого другого компьютера
  5. эти изменения отправляются на сервер, чтобы другие могли их скачать, и так далее.

Сервер Git – это в основном компьютер, подключенный к Интернету, на котором мы можем хранить репозитории Git. Для этого можно использовать любой компьютер, и здесь мы будем использовать Raspberry Pi , поскольку он имеет преимущество, заключающееся в том, что он является очень недорогим вариантом и обеспечивает хорошую производительность.

Зачем создавать наш собственный сервер?

В Интернете существуют различные сервисы, которые позволяют нам делиться репозиториями Git, например, GitHub, который является одним из самых популярных.

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

Некоторые сервисы, такие как GitHub, предлагают частные репозитории – так что вы можете выбирать, кто видит ваш код – хотя они не бесплатны. Вот почему создание нашего собственного сервера может быть хорошей идеей.

Мы не воссоздаем GitHub здесь

Просто для ясности: мы не пытаемся копировать GitHub с простым Raspberry Pi. Сервер, который мы создадим, очень прост со всеми функциями Git, но не более того. Таким образом, не будет возможности для таких вещей, как запросы на извлечение или даже графический интерфейс.

Даже если он прост, этот сервер будет далеко не бесполезным. У меня в настоящее время есть сервер Git на моем Raspberry Pi. Я использую его для обмена кодом между моим рабочим столом и ноутбуком. Я использую GitHub для некоторых проектов, но не для всех. Для некоторых частных проектов или экспериментальных вещей, которыми я сейчас не хочу делиться, я использую свой маленький сервер. Таким образом, я могу работать с любого компьютера, не публикуя свой код.

Что нам понадобится?

Существует несколько версий Raspberry Pi, от очень маленькой и дешевой Raspberry Pi Zero до недавней и мощной Raspberry Pi 3. Какую версию выбрать для своего сервера Git?

Я не тестировал Raspberry Pi Zero, поэтому, честно говоря, я не смогу сказать, достаточно ли этого (хотя я думаю, что это так). Тем не менее, самой первой версии Raspberry Pi в основном достаточно, и поскольку Pi 2 и 3 доступны, возможно, вы сможете найти первый Raspberry Pi за небольшую цену, так что это хороший вариант для размышления.

Во всяком случае, Raspberry Pi – это просто материнская плата. Какую бы версию вы ни выбрали, вам понадобится как минимум чехол для его защиты, источник питания (через microUSB, например смартфон), SD-карта для хранения ОС (классическая SD-карта или microSD в соответствии с версией Pi, которую вы выбрал) и способ подключения пи к интернету. В зависимости от имеющегося у вас Pi, вы можете подключить его через Ethernet, напрямую через Wi-Fi (для Pi 3) или с помощью ключа Wi-Fi.

Теперь, когда у вас есть все необходимое для этого проекта, давайте посмотрим, как получить сервер Git с этого небольшого компьютера!

Как собрать Git-сервер с Raspberry Pi

Установка Git

Первое, что понадобится нашему серверу, это Git. Вы можете найти его в пакете git

С очень простой точки зрения, это все, что нам нужно, чтобы получить сервер Git. Тем не менее, есть некоторые детали, которые мы можем добавить, чтобы получить правильный и более безопасный сервер.

Создание выделенного пользователя

Хорошей практикой является создание нового пользователя для каждого использования Raspberry Pi. Этот пользователь является официальным менеджером соответствующего использования.

Некоторые программы автоматически добавляют своих собственных пользователей. Например, медиацентр Kodi создает пользовательский kodi В том же духе установка решения LAMP (для получения веб-сервера) создаст пользовательские www-data Здесь мы создадим пользователя git Для этого введите следующую команду на Raspberry Pi:

Если вы хотите, вы можете изменить имя выделенного пользователя на другое, изменив git

Вам будет предложено ввести пароль для этого пользователя. Затем вы сможете ввести другую информацию, например, настоящее имя пользователя или номер его телефона. Поскольку git

Использование SSH для доступа к серверу

Наличие выделенного экрана для сервера практически бесполезно. В большинстве случаев мы просто хотим обмениваться данными с ним. Для этого мы можем использовать SSH, безопасный способ связи между двумя компьютерами.

Объяснение того, как работает SSH, не является целью этой статьи, поэтому я не буду описывать, как его использовать. Тем не менее, вы можете найти отличную документацию на официальном сайте Raspberry Pi.

Как использовать наш сервер

Наш сервер теперь готов к использованию. Итак, пришло время посмотреть, как это использовать. Здесь мы увидим, как создать новый репозиторий и как его обновить.

Давайте покажем миру наши великие силы воображения, создав тестовое хранилище под названием Hello-World

Создание нового репо на Raspberry Pi

Первое, что нужно сделать, это инициализировать наш новый репозиторий на Raspberry Pi. На стороне сервера репозиторий – это то же самое, что и на вашем компьютере: папка с подпапкой .git Поэтому первое, что нужно сделать, это создать эту папку.

На Raspberry Pi используйте пользователя git Вы можете создать эту папку где угодно: на SD-карте Raspberry Pi или на внешнем жестком диске . В следующей команде мы создаем папку в домашней папке git

Обратите внимание на суффикс .git Этот суффикс не является обязательным, и это просто соглашение: на стороне сервера этот суффикс есть в репозиториях. Это соглашение, которое вы можете найти на GitHub, например.

Теперь измените ваш текущий каталог на новый:

Наконец, мы инициализируем репозиторий:

Опция —bare Еще раз, это соглашение: голое хранилище не хранит данные так же, как они хранятся в рабочем хранилище. Голые репозитории не приспособлены для работы репозиториев, но они идеально подходят для сервера. Более подробную информацию о пустых репозиториях можно найти в документации Git .

Инициализация репо на вашем компьютере

На компьютере, который вы будете использовать для работы над проектом, создайте новую папку (где угодно). В терминале перейдите в этот каталог (с помощью cd

Здесь мы создаем нормальный репозиторий, а не пустой. Таким образом, мы увидим файлы так, как мы ожидаем, на нашем компьютере.

Создание ссылки

Наши два пустых репо должны общаться. Чтобы включить эту связь, мы создадим удаленный в рабочем хранилище. Все еще находясь в папке рабочего репозитория на вашем компьютере (где вы запустили git init

Эта команда создает новый пульт с именем pi XXX.XXX.XXX.XXX Наконец, часть /home/git/Hello-World.git

Работа с репозиториями

Теперь наш репо готов к использованию. Создавайте новые файлы, редактируйте их, как всегда, удаляйте другие. Когда вы будете готовы создать свой первый коммит, просто выполните следующее:

После нескольких коммитов вы захотите отправить свои изменения на ваш сервер. Для этого используйте следующую команду, которая должна показаться вам знакомой, если вы уже использовали что-то вроде GitHub:

В приведенной выше команде мы отправляем ветку master pi Это пульт, который мы создали в предыдущей части, поэтому подумайте об изменении его имени, если вы выбрали другое!

Теперь кто-то другой, имеющий доступ к серверу – или вы на другом компьютере – может загрузить ваши изменения и внести изменения. Чтобы загрузить последние изменения и получить обновленный рабочий репозиторий на вашем компьютере, введите следующую команду:

Клонирование репозитория

Привлечение нового пользователя? Или добавить себя на другом компьютере? Репозиторий существует на сервере, но его необходимо добавить на другой компьютер. Это когда пришло время клонировать хранилище.

Клонирование репо требует знания того, где он живет, или, другими словами, каков его адрес. Поскольку это ваш сервер, вы должны это знать, и он такой же, как тот, который мы использовали выше:

Клонируя репозиторий, автоматически создается пульт с именем origin

Заключительные слова

Как было сказано выше, сервер, который мы только что создали, очень прост, но этого вполне может быть достаточно для небольших или частных проектов. Если вам нужно больше возможностей, вы должны рассмотреть другой инструмент или что-то вроде частного GitHub-репозитория.

Вы настроили Raspberry Pi в качестве сервера Git? Или сделал что-то еще интересное с Пи? Пожалуйста, сообщите нам об этом в комментариях.