Git-зеркало официального репозитория

Тема в разделе "Техподдержка", создана пользователем Tab10id, 13 авг 2015.

  1. Tab10id

    Tab10id

    Регистрация:
    21 окт 2012
    Помимо основного svn-репозитория имеется его git-зеркало - http://git.fonline.ru/fonline_sdk.git/tree/master/
    Работа с репозиторием может осуществляться по протоколу git:
    Команда клонирования репозитория:
    Код:
    git clone git://git.fonline.ru/fonline_sdk
    Основные преимущества git:
    1. Git - распределенная система. То есть нет технического распределения ролей между репозиториями. Любой репозиторий хранит в себе полную информацию обо всех изменениях и может выступать как в качестве клиента, так и в качестве сервера. Наличие полной локальной истории изменений так же исключает необходимость подключения к серверу для переключения между разными ревизиями и ветками. Так как разработка ведется локально вы можете делать сколько угодно коммитов перед их фактической отправкой в удаленный репозиторий.
    2. Удобная система работы с ветками. В отличии от системы subversion, ветка в git это не копия полной структуры репозитория на момент какой-либо ревизии, а всего лишь система указателей на определенные коммиты (ревизии). В сочитании с локальным хранением истории изменений, переключение между ветками происходит очень быстро. Слияние веток осуществляется с сохранением авторства и всей историей изменений.
    Подробнее про git:
    https://git-scm.com - оффициальный сайт;
    https://git-scm.com/book/ru/v1 - первое издание книги Pro Git на русском;
    https://git-scm.com/book/ru/v2 - второе издание (на момент 12.08.2015 некоторые разделы все еще не переведены).

    Клиенты:
    Их много. Одними из самых популярных являются TortoiseGit под Windows и SmartGit под все.

    Вариант организации разработки на движке fonline с использованием git:
    • Стабильная версия проекта всегда содержится в ветке master;
    • Активная разработка ведется в отдельных ветках репозитория;
    • Обновление версии СДК осуществляется путем слияния с соответствующей веткой в репозитории.

    Один из возможных порядков действий
    Подготовка репозитория
    1. Клонируем репозиторий СДК:
      Код:
      git clone git://git.fonline.ru/fonline_sdk
      После окончания процесса клонирования в текущей директории появится папка fonline_sdk с последней ревизией SDK (ветка master)
    2. Переименовываем ветку master в ветку fonline_sdk
      Код:
      git branch -m fonline_sdk
      Данная ветка не будет содержать в себе никаких коммитов, кроме коммитов официального репозитория и будет использоваться исключительно для обновления версии SDK в проекте
    3. Создаем ветку master для хранения стабильной версии проекта
      Код:
      git checkout -b master
      На текущий момент ветка не содержит в себе никаких коммитов кроме официальных
    Работа с репозиторием
    Для простоты предположим что мы хотим подправить в своем проекте карту Арройо.
    1. Создаем новую ветку для данной задачи.
      Код:
      git checkout -b add_statue_of_dweller_to_arroyo
    2. Делаем необходимые изменения в карте и коммитим результат.
      Код:
      git add Server\maps\arroyo.fomap
      git commit -m "Добавил статую Выходца в Арройо"
    3. Вспоминаем про то, что хотели повесить на данную статую скрипт. Делаем необходимые изменения в карте. Редактируем скрипты и снова коммитим результат.
      Код:
      git add Server\maps\arroyo.fomap
      git add Server\scripts\arroyo_rayders.fos
      git commit -m "Активируем нападение рейдеров после применения навыка ремонта на статую"
    4. После тестирования всех фич, "сливаем" наши изменения в ветку master.
      Код:
      # переключаемся на ветку master
      git checkout master
      # производим merge с нашей веткой
      git merge add_statue_of_dweller_to_arroyo
      # удаляем ветку add_statue_of_dweller_to_arroyo, так как она полностью "слита" в master
      git branch -d add_statue_of_dweller_to_arroyo
    Обновление sdk.
    Через некоторое время мы можем заметить что в официальном репозитории fonline SDK произошли изменения которые мы хотим к себе перенести.
    1. Обновление ветки sdk.
      Код:
      # Переключаемся на ветку SDK
      git checkout fonline_sdk
      # Получаем изменения из официального репозитория
      git pull
    2. Создаем ветку для обновления версии SDK в нашем проекте.
      Код:
      git checkout master
      git checkout -b sdk_update
    3. "Сливаем" изменения из официального репозитория в созданную ветку.
      Код:
      git merge fonline_sdk
      Скорее всего на этапе слияния git сообщит об обнаружении конфликтов. Вероятность возникновения конфликтов тем выше чем больше различий между официальным SDK и текущим проектом. Конфликты возникают когда разные коммиты изменяют данные в одних и тех же файлах. К примеру: мы изменили одну из реплик в диалоге в своем проекта, но та же самая реплика была изменена на что-то другое в самом SDK.
      Для упрощения разрешения конфликтов существует множество различных программ, как правило они входят в состав GUI-клиентов git. Подробнее о разрешении конфликтов можно почитать в официальной документации git.
      Так или иначе разрешив все конфликты, коммитим данные изменения в текущую ветку.
      Код:
      git commit -m "Устранение конфликтов"
    4. После тщательной проверки на правильность работы, сливаем изменения в ветку master.
      Код:
      git checkout master
      git merge sdk_update
      git branch -d sdk_update
    Работа со своим удаленным репозиторием
    Подробная работа с удаленными репозиториями описана в официальной документации: https://git-scm.com/book/ru/v1/Основы-Git-Работа-с-удалёнными-репозиториями.
    Здесь же я хочу показать только сам принцип работы.
    Предположим, что мы хотим вести разработку проекта в команде и хотим чтобы другие разработчики имели доступ к нашим коммитам. Так же предположим что мы уже имеем хостинг позволяющий хранить git-репозитории и уже создали на нем пустой репозиторий для нашего проекта. Допустим репозиторий будет доступен по адресу http://the-first-dweller.ru/git.

    На самом деле, в нашем проекте уже настроен один удаленный репозиторий, он автоматически добавляет во время выполнения команды git clone <адрес репозитория>
    По-умолчанию, git привязывает наш локальный репозиторию к данному удаленному, добавляя его под именем origin. Но это не мешает нам привязывать наш локальный репозиторий к любым другим.
    Для начала, переименуем удаленный репозиторий origin во что-нибудь другое, так как в дальнейшем мы хотим сделать основным - репозиторий на нашем хостинге.
    Код:
    git remote rename origin sdk
    Теперь добавляем наш репозиторий в качестве основного.
    Код:
    git remote add origin http://the-first-dweller.ru/git
    Отправляем изменения из ветки master в наш репозиторий.
    Код:
    git push origin master
    После данного этапа, другим разработчикам останется только клонировать данный репозиторий и работать с ним так же, как было описано выше.
    Код:
    git clone http://the-first-dweller.ru/git
    PS: Надеюсь, мне удалось описать базовую работу с git достаточно понятно, по всем предложениям об улучшении данного материала можно обращаться ко мне (как через личные сообщения, так и через комментарии в данной теме).
    Последнее редактирование: 24 ноя 2015
  2. Dagnir

    Dagnir

    Регистрация:
    16 фев 2011
    Хорошо было бы где-то иметь и большую заметную ссылку на основной репозиторий, а то до вчерашнего для она только косвенно упоминалась в теме «Как качать с репозитория». :)
  3. Tab10id

    Tab10id

    Регистрация:
    21 окт 2012
  4. Brightside

    Brightside

    Регистрация:
    2 июн 2013
    Последнее редактирование: 2 окт 2018

Поделиться этой страницей