Tuesday, April 30, 2019

Синхронизация форкa на github с основным репозиторием

Два программиста работают в команде над двумя проектами:


Когда программисты помогают друг другу, каждый ведет работу в своем форке. Форк (англ. fork) - это копия репозитория Github, которая также хранится на Github в аккаунте другого пользователя.

Синхронизация

Обычно, когда к проекту подключается Вадим, Дмитрий уже внес новые данные, которых еще нет в форке у Вадима. Перед тем, как приступить к написанию кода, Вадиму нужно перенести последние правки Дмитрия в свой форк.

Лучшая инструкция размещена на сайте Github: syncing a fork

Если английский не понятен, то русскоязычные статьи можно найти в поисковике по фразе:
«Синхронизация fork-a на github с основным репозиторием»

Сайты

Сайт Дмитрия: http://www.gorkogo55.ru/
Сайт Вадима: http://www.events4friens.ru/


Tuesday, April 23, 2019

Совместная работа с git

Когда несколько программистов работают над одним проектом, практически всегда они используют систему контроля версий для совместной работы с одним исходным кодом. Это может быть gitsvnperforce и другие.

В данной статье описывается один из способов комфортного взаимодействия программистов. Стоит сразу отметить, что данный метод не претендует на звание «the best git workflow ever» и будет постоянно дорабатываться и улучшаться.

Мы используем OS X, VSCodeBitBucketSourceTree и git. Поэтому в примерах будут использоваться именно эти инструменты.

0. Зачем нам это?

Классический пример:


Система контроля версий - не идеальна. Потерять код во время синхронизации с чужими изменениями - горе в команде 😭. Подход, который изложен ниже поможет минимизировать побочные эффекты системы контроля версий.

1. Начало работы

Реализация каждой задачи выполняется в отдельной ветке разработки. Перед тем как начать программирование, необходимо создать отдельную ветку:
git checkout -B my-task 
git push --set-upstream origin my-task

Дерево коммитов выглядит так:


В то время, как программист вносит изменения в свою ветку my-task, другие изменения появляются в основной ветке разработки. Как правило, в конце выполнения задачи дерево коммитов выглядит так:




2. Перенос своих изменений «вверх»

В статье merging-vs-rebasing от подробно расписаны стратегии синхронизации. Мы используем rebasing.

Команда rebase переносит коммиты наверх из вашей ветки в ветку разработки. Команды:
git checkout my-task
git rebase develop
следует читать «переносим изменения my-task наверх ветки develop»

Коммиты «переносятся наверх» последовательно. Обычно «перенос» каждого коммита происходит автоматически. Но иногда автоматически «перенести» (или «накатить» коммит) не удается и тогда можно увидеть подобное сообщение:


Пояснение с скрину:
1. программист выполнил команду rebase
2. система не смогла автоматически исправить «накатить» коммит
3. система говорит, что нужно сделать. Также в редакторе VSCode подсвечивается проблемное место

После исправления конфликта выполнить указания системы (см. пункт 3):
git add .
git rebase --continue

Эти две команды указывают, что все конфликты в коде разрешены и необходимо продолжить «перенос». Ситуация может повторятся несколько раз. В таком случае всегда следует читать логи и следовать инструкциям системы git.

После завершения переноса необходимо «запушить перенос на сервер bitbucket» c флагом force:
git push -f origin my-task

После переноса дерево коммитов выглядит так:



3. Проверка кода

После того, как «изменения перенесены наверх», необходимо на сайте bitbucket создать pull request. Для этого необходимо на соответствующей странице нажать кнопку «Create pull request»

Выглядит это так:

Пояснение к скрину:
1. Выбрать ветку, в которой велась разработка (my-task)
2. Выбрать ветку, в которую «вливаем» изменения (develop)
3. Проверить список коммитов, убедиться что ничего не было потеряно.
4. Выставить галочку, так как ветка (my-task) будет неактуальна.

Опять нажать кнопку «Create pull request»
Появится окно:

Пояснение к скрину:
1. «Влить» все данные my-task в ветку develop
2. Просмотреть весь код и указать статус «Approve»
3. Все изменения вместе

4. Завершение задачи

После нажатия кнопки «Merge» данные попадут в главную ветку разработки. После синхронизации кода с сервером получится такое «закрытие» в истории коммитов:


Пояснение к скрину:
1. Красивое дерево истории коммитов
2. Все коммиты вместе для более легкого восприятия задачи в целом

Ветку задачи my-task желательно удалить. Она более не нужна. При доработках задачи желательно создавать новую ветку (см пункт 1)

Теперь можно смело приступать к новой задаче и держать эту инструкцию под рукой.

Friday, April 19, 2019

Сайт для торгового центра

Старинный торговый центр «Две пятерки» выглядит мрачно.



Так же плохо обстоят дела с навигацией.





Так появилась идея создания сайта. Простого сайта, который решит проблему навигации и увеличит посещаемость ТЦ.

Идея была озвучена на хакатоне (Trello board - KonigHack #4) и позже реализована (сайт - gorkogo55.ru).

Сайт состоит из из трех страниц:
  1. Главная страница
  2. Страница поиска
  3. Страница магазина
Дизайн сайта максимально соответствует по мрачности торговому центру 







На сайте есть низкая посещаемость, поэтому в будущем планируется улучшение дизайна и навигации по сайту.