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

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

Настройка ключей доступа к репозиторию

Заходим или запускаем Git-bash. Сначала необходимо сгенерировать ключ следующей командой (команды выполняются в терминале):

$ ssh-keygen

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

На всякий случай (хотя и не обязательно, если все работает), необходимо сообщить системе (вернее ssh-agent) о том, что мы добавили/изменили ключи. Для этого необходимо выполнить следующую команду без аргументов, если ваш ключ имеет название по умолчанию id_rsa:

$ ssh-add

Или, если ваш ключ имеет другое название, то:

$ ssh-add имя_ключа

Список известных агенту ключей можно проверить так:

$ ssh-add -l

ssh-add необходимо запускать после каждого пересоздания ключей.

Иногда ssh-add выдает ошибку работы агента управления ключами. Чтобы исправить этот баг необходимо принудительно запустить агента:

$ eval `ssh-agent -s`   # Запускаем ssh-agent (Это вариант для Windows)
$ eval `ssh-agent`      # (Вариант для Linux)
$ ssh-add               # Теперь можем сообщать ему о ключах

Более подробно проблема обсуждается здесь

Отображаем и копируем содержимое открытого ключа:

$ cat ~/.ssh/id_rsa.pub

Затем заходим в наш профиль на civnote.ru и добавляем туда текст скопированного на предыдущем шаге открытого ключа (не забудьте удалить все старые ключи из своего профиля!):

На шаге 2 (на картинке выше) придумываем уникальный идентификатор. На шаге 3 по умолчанию ключ создается просто как User key. Deploy key ключ трогать не нужно. На шаге 4 вставляем в поле скопированный ранее открытый ключ.

Если в дальнейшем при пуше изменений на сервер, Git bash в Windows будет просить логин и пароль, то вновь зайдите в свой профиль, удалите старый ключ и создайте новый. И проверьте есть ли у вас ключ в ~/.ssh и подхватил ли его ssh-agent.

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

Хранилище автоматически создается на сервере при создании проекта с одним коммитом и Readme файлом (по аналогии с Github). Теперь вы можете перейти на ссылку "Хранилище" вашего проекта просмотреть исходный код.

Открываем обзорную страницу своего проекта и копируем SSH адрес вашего репозитория. Он нам пригодится далее:

Заливка кода в удаленный репозиторий

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

$ git clone ssh://git@civnote.ru:name_of_your_rep.git   # name_of_your_rep заменяем на свой адрес

Затем вносим свои какие-либо изменения (или просто копируем наш код в папку с клонированным проектом - это удобно, если вы уже написали код, но версионный контроль еще не вели):

$ touch readme.txt
$ git add readme.txt
$ git commit -m 'My first commit'

Если вы уже вели версионный контроль, то в этом случае необходимо объединить изменения на вашем компьютере и изменения на сервере (т.к. там есть один коммит). Для этого сначала добавим адрес удаленного репозитория к своем локальному репозиторию. Скопировать адрес можно из своего проекта на сайте:

Добавляем удаленный репозиторий:

$ cd existing_git_repo
$ git remote add origin ssh://git@civnote.ru:name_of_your_rep.git  # name_of_your_rep заменяем на свой адрес

Если вы, например, ошиблись и добавили неправильный удаленный репозиторий, то нужно удалить неправильный и затем добавить верный:

$ git remote rm origin
$ git remote add origin ssh://git@civnote.ru:name_of_your_rep.git  # name_of_your_rep заменяем на свой адрес

И затем скопируем изменения с сервера в свой репозиторий:

$ git fetch origin

Затем сливаем вашу ветку master с удаленной веткой master в которой находится только один коммит:

$ git merge origin/master

И затем можем заливать изменения на сервер:

$ git push origin master

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

Более подробно ознакомиться с хитростями удаленной работы можно здесь

Если у вас в репозитории уже есть какой-то тестовый код, который надо удалить при добавлении рабочего кода, то сделать это очень просто. Достаточно склонировать или сделать pull для обновления локального репозитория (в зависимости от того, есть ли у вас репозиторий на своем компьютере), удалить эти файлы командой git rm name_of_file, закоммитить эти изменения и запушить их обратно на сервер. Все, репозиторий чист и доступен для добавления нового кода.

В итоге в удаленный репозиторий была добавлена первая информация, которую вы можете с распирающим чувством гордости посмотреть на вкладке "Хранилище" своего проекта.
Интерфейс хранилища довольно богат и позволяет наглядно следить за историей проекта - кто, когда и какие правки вносил в проект. Согласитесь - это очень удобно!

Как сделать свой проект на основе шаблона транспайлера

Переходим в папку со своими проектами:

$ cd your_dir

Сначала необходимо склонировать проект trans_browser:

$ git clone http://test@civnote.ru/trans_browser.git
$ cd trans_browser

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

$ git remote rm origin
$ git remote add origin ssh://git@civnote.ru/name_of_your_repo.git
$ git remote show origin

В результате должен отобразиться репозиторий вашего проекта, а не репозиторий http://test@civnote.ru/trans_browser.git

Далее необходимо получить изменения из своего репозитория, чтобы объединить их с проектом trans_browser:

$ git fetch origin

Объединяем код проекта trans_browser и нашего проекта:

$ git merge origin/master --allow-unrelated-histories

Просмотрим состояние репозитория и убедимся, что скорее всего слияние веток произошло с конфликтами:

$ git status

Чтобы удалить конфликты необходимо отредактировать файл README.md и убрать из него конструкции обработки конфликтов Git.

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

$ git add .
$ git commit -m "Merge ended"
$ git push origin master

Об успехе заливки можно убедиться на странице хранилища своего проекта.

settings_of_proj.png (57,232 КБ) Александр Дмитриев, 17.12.2014 22:33

add_key.png (141,89 КБ) Александр Дмитриев, 17.12.2014 22:33

add_deploy.png (92,143 КБ) Александр Дмитриев, 17.12.2014 22:33

puttygen1.png (52,411 КБ) Александр Дмитриев, 17.12.2014 22:33

key.png (51,602 КБ) Александр Дмитриев, 17.12.2014 22:33

repository.png (28 КБ) Александр Дмитриев, 17.12.2014 22:33

picture661-1.png (10,284 КБ) Александр Дмитриев, 17.12.2014 22:42

picture411-1.png (10,214 КБ) Дмитриев Александр, 20.11.2015 06:16

Добавить изображение из буфера обмена (Максимальный размер: 20 МБ)