- PVSM.RU - https://www.pvsm.ru -
Удобно иметь доступ к своему коду с разных компьютеров. Поэтому некоторые свои проекты я кладу на github. Но есть и такие, которые выкладывать в публичный доступ я не хочу (стыдно за код, либо имеют коммерческий потенциал), а покупать тариф с приватными репо и жаба душит и хлопотно.
А еще дома я кодю то на ноуте с виндой, то на домашнем сервачке с убунтой. Поэтому для личных проектов, над которыми работаю в одиночку с разных домашних компов я нахожу удобным иметь в домашней сети основной репозитарий, а не приватный репо на гитхабе.
Мои камиты в локальный репо на винде или на убунте автоматом переносятся в основной репозитарий. Просто чтобы не держать в голове лишней рутины. Домашний основной репозитарий должен всегда содержать самую свежую версию проекта.
Имеем несколько (>=2) компьютеров в домашней сети. Выбираем один из них и называем его сервер, остальные назовем клиентами. На сервере должен быть linux, а не windows — так проще. На каждом из них мы будем иметь доступ к основному репозитарию и сможем делать в локальном репозитарии вот так:
git pull origin master
git push origin master
Основные репозитарии будут храниться в домашнем каталоге пользователя git — подальше от глаз. Тем более, что файловый доступ к ним не нужен.
Необходим доступ с каждого компьютера на сервер по ssh для пользователя git. Как он настраивается написано много статей.
Таким образом, если ваш сервер называется fobos, и вы настроили ssh доступ для пользователя git на компьютере-клиенте, то вы должны соединяться с него с сервером такой командой: ssh git@fobos
. Если вы планируете иметь локальный репозитарий и на сервере, то эта команда должна выполняться без ошибок и на сервере.
Тут хочу заметить, что приватный ключ пользователя git, расположенный на компьютере-клиенте удобнее иметь без парольной фразы, т.к. вводить парольную фразу при каждом пуше/пулле утомляет. Можно конечно использовать агент, но ведь надо еще не забыть его запусить и подключить к нему ключ.
Также на каждом компьютере клиенте и на сервере должен быть установлен git.
На винде у меня стоит git version 1.7.7.msysgit.1, OpenSSH_4.6p1,OpenSSL 0.9.8e23 Feb 2007.
А на убунте стоит git version 1.7.0.4
Что такое bare репозитарий? Это пустой репозитарий, в который не предполагается делать камиты, а только пуши. Он предназначен не для работы, а для хранения изменений, сделанных в других (локальных) репозитариях. Bare репозитарий расположен на сервере, а локальные и на клинтах и на сервере.
Выберем какой-нибудь из существующих (или только что созданный) проект с git репозитарием, допустим папка проекта многозначительно называется project19. Мы создаем каталог project19.git на сервере в домашней папке пользователя git от его имени. Имя папки оканчивается на .git потому что такова конвенция именования bare репозитариев. Из его имени сразу видно, что это не рабочий, а bare репозитарий.
adduser git
sudo su git
cd ~
mkdir project19.git
cd project19.git
git init --bare
exit
Репозитарий создан, переходим к компьютеру-клиенту.
Перейдем в папку проекта project19 и выполним команду:
git remote add origin ssh://git@fobos/~/progect19.git
Эта команда добавит в конфиг репозитария ссылку на удаленный репозитарий под алиасом origin. Таким образом, origin теперь указывает на наш bare репозитарий. Теперь должны работать push и pull:
git push origin master
git pull origin master
Предположим, что на сервере нет локального репозитария. Есть только bare, но его нельзя использовать для работы.
Чтобы его создать переходим в папку где у вас находятся папки проектов и создаем папку project19, заходим в нее.
Выполняем команду: git clone ssh://git@fobos/~/progect19.git
Это выполняется абсолютно одинаково как на локальном компьютере, так и на сервере. Вот в чем удобство ssh.
Чтобы каждый раз при выполнении камита в локальном репозитарии автоматически выполнялся push в основной репозитарий, нужно настроить хук.
Для этого переходим в папку проекта project19 на компьютере-клиенте и заходим в подпапку .git/hooks, создаем файл post-commit с таким содержимым.
#!/bin/sh
git push origin master
Если компьютер-клиент под linux, делаем файл исполняемым chmod +x post-commit
12 команд. Иключая из них exit, pull/push/clone, которые к настройке не относятся, получаем удаленный репозитарий за 8 команд консоли. Но это без учета настройки ssh доступа по ключу для пользователя git.
Автор: Zloy1
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/3810
Нажмите здесь для печати.