Управление репозиториями¶
Для начала у вас должен быть установлен и настроен 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
Об успехе заливки можно убедиться на странице хранилища своего проекта.