четверг, 13 июня 2013 г.

Подключение git remote репозитория.

Подключение нашего локального git репозитория к чистому репозиторию на сервере.

Сервер

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

Предположим что в наличии имеется некая виртуалка на которой стоит linux ОС и git. Назовем ее громким словом сервер. 

Подключаться мы будем к серверу по ssh с вводом пароля, самый простой вариант. Создадим bare  репозиторий:
Copy Source | Copy HTML
mkdir google-api.git
cd google-api.git
git init --bare.git

У меня крутится gitweb от пользователя apache, следовательно что бы права были как надо: (я понимаю что это не правильно так делать, но в академических целях очень даже подойдет, плюс пользователем apache у меня пользуется только uwsgi для gitweb и redmine)

Copy Source | Copy HTML
find ../google-api.git/ -type d -exec chmod g+s {} \;
chown -R apache:apache ../google-api.git/
chmod -R g+w ../google-api.git/
Первая строка добавляет sticky bit для всех вложенных папок. Нужно для того что бы при создании нового файла или папки ей назначалась группа родительской папки, в нашем случае apache.

Вторая меняет владельцев рекурсивно.

Третья добавляет права на запись для группы.

Клиент

Теперь переберемся на домашнюю машину. Пусть у нас будет папка с файлами проекта, но еще не инициализированная git. Переходим в эту папку и:

Copy Source | Copy HTML
git init
git remote add origin ssh://user@git.example.org/var/www/git/google-api.git
git fetch
git add .
git push origin master

Здесь мы: инициализируем проект, добавляем remote, загружаем файлы с сервера, добавляем целиком все наши файлы в локальный git, отправляем на сервер.

Ну и что бы потом можно было писать короче (только git pull или git push):

Copy Source | Copy HTML
echo -e "[branch \"master\"]\n   remote = origin\n   merge = refs/heads/master" >> .git/config
или, что лучше, руками правим файл .git/config, добавляя туда(git add remote default):

Copy Source | Copy HTML
[branch "master"]
  remote = origin
  merge = refs/heads/master



Комментариев нет :