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

Автор темы #1
Дата рег
21 Окт 2012
Сообщения
173
Симпатии
79
Помимо основного svn-репозитория имеется его git-зеркало - https://git.fonline.ru/fonline/sdk
Работа с репозиторием может осуществляться как по протоколу git (ниже комманда для клонирования репозитория, правда при этом придется скачать около 40гб):
Код:
git clone https://git.fonline.ru/fonline/sdk.git
Так же вы можете просто скачать нужную вам ревизию: https://git.fonline.ru/fonline/sdk/tags

1540041753815.png


Основные преимущества 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 https://git.fonline.ru/fonline/sdk.git
    После окончания процесса клонирования в текущей директории появится папка 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 достаточно понятно, по всем предложениям об улучшении данного материала можно обращаться ко мне (как через личные сообщения, так и через комментарии в данной теме).
 
Последнее редактирование модератором:
Дата рег
16 Фев 2011
Сообщения
71
Симпатии
296
Дата рег
2 Июн 2013
Сообщения
62
Симпатии
17
Дело @Tab10id живет. Зеркало было обновлено/заменено рабочим:

https://git.fonline.ru/

Поправлены ссылки в оригинальном сообщении
 
Последнее редактирование:
Автор темы #5
Дата рег
21 Окт 2012
Сообщения
173
Симпатии
79
fatal: pack has bad object at offset 14971867838: inflate returned -3 при попытке git fetch.
Там все ок?
ЗЫ: мое зеркало еще живо, просто на сервере основного зеркала закончилось место, а я это поздно заметил, если что, могу перепушить (мне очень жаль что хэши коммитов старого и нового репозитория не совпадают, а еще у меня настроен маппинг всех коммитеров).
 
Дата рег
2 Июн 2013
Сообщения
62
Симпатии
17
fatal: pack has bad object at offset 14971867838: inflate returned -3 при попытке git fetch.
Там все ок?
ЗЫ: мое зеркало еще живо, просто на сервере основного зеркала закончилось место, а я это поздно заметил, если что, могу перепушить (мне очень жаль что хэши коммитов старого и нового репозитория не совпадают, а еще у меня настроен маппинг всех коммитеров).
Ну давай, мое умирает после неудачного восстановления ВМ-ки из снапшота, ты подтягивай последние изменения, потом пиши - я обратно твое верну тогда, мне сейчас не до этого, заодно ресурсов освобожу, они сейчас нужны :)
 
Последнее редактирование:
Автор темы #7
Дата рег
21 Окт 2012
Сообщения
173
Симпатии
79
Ну давай, мое умирает после неудачного восстановления ВМ-ки из снапшота, ты подтягивай последние изменения, потом пиши - я обратно твое верну тогда, мне сейчас не до этого, заодно ресурсов освобожу, они сейчас нужны :)
Завтра будет (если смогу уложить спать дочку раньше, чем она меня).
 
Автор темы #8
Дата рег
21 Окт 2012
Сообщения
173
Симпатии
79
Поднятие гитлаба привело к необходимости миграции серверов.. Почти все готово, но еще нет=(
 
Автор темы #9
Дата рег
21 Окт 2012
Сообщения
173
Симпатии
79
Можно пользоваться. Осталось допилить автоматическое подтягивание свежих коммитов.