Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТПСПП_ЛЕКЦИИ_MOD2.doc
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
763.39 Кб
Скачать

Обычный workflow при работе с локальным репозитарием.

Git обладает необычайной легкостью в использовании не только как распределенная система контроля версий, но и в работе с локальными проектами. Давайте разберем обычный цикл — начиная с создания репозитария — работы разработчика git над собственным персональным проектом:

1) mkdir git-demo

2) cd git-demo

3) git init

4) git add.

5) git commit -m «initial commit»

6) git branch new-feature

7) git checkout new-feature

8) git add.

9) git commit -m «Done with the new feature»

10) git checkout master

11) git diff HEAD new-feature

12) git merge new-feature

13) git branch -d new-feature

14) git log --since=«1 day»

Разберем каждое из действий. 1-2 — просто создаем рабочую директорию проекта. 3 — создаем репозитарий в директории. 4 — индексируем все существующие файлы проекта (если, конечно, они вообще были). 5 — создаем инициализирующий коммит. 6 — новая ветка, 7 — переключение в нее (можно сделать в один шаг командой git checkout -b new-feature). Далее, после непосредственной работы с кодом, индексируем внесенные изменения(8), совершаем коммит(9). Переключаемся в основную ветку(10), смотрим отличия между последним коммитом активной ветки и последним коммитом экспериментальной (11). Проводим слияние (12) и, если не было никаких конфликтов, удаляем ненужную больше ветку (13). Ну и на всякий случай оценим проведенную за последний день работу (14).

Почему именно так? Зачем отказываться от линейной модели? Хотя бы даже потому, что у программиста появляется дополнительная гибкость: он может переключаться между задачами (ветками); под рукой всегда остается «чистовик» — ветка master; коммиты становятся мельче и точнее.

Общественные репозитарии.

Общественный репозитарий — способ обмениваться кодом в проектах, где участвует больше двух человек. Лично я использую сайт github.com, настолько удобный, что многие начинают из-за него пользоваться git.

Итак, создаем у себя копию удаленного репозитария:

git clone git://github.com/username/project.git master

Команда создала у вас репозитарий, и внесла туда копию ветки master проекта project. Теперь можно начинать работу. Создадим новую ветку, внесем в нее изменения, закоммитимся:

git branch new-feature

// edit README

git add .

git commit -m "Added a super feature"

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

git checkout master

git pull

git merge new-feature

Если не было неразрешенных конфликтов, то коммит слияния готов.

Команда git pull использует так называемую удаленную ветку (remote branch), создаваемую при клонировании удаленного репозитария. Из нее она извлекает последние изменения и проводит слияние с активной веткой.

Теперь остается только занести изменения в центральный (условно) репозитарий:

git push

Нельзя не оценить всю гибкость, предоставляемую таким средством. Можно вести несколько веток, отсылать только определенную, жонглировать коммитами как угодно.

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

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

ЛЕКЦИЯ 9. Рефакторинг.

ЦЕЛИ РЕФАКТОРИНГА.

Когда применять рефакторинг?

  • при добавлении новой функции

  • если требуется исправить ошибку

  • при разборе кода (в команде)

Код с душком – повод для рефакторинга.

  1. Дублирование кода.

А) одно и то же выражение присутствует в 2 методах одного класса

Б) одно и то же выражение встречается в 2 подклассах одного уровня

В) дублирующийся код содержится в 2 разных классах

  1. Длинный метод

  2. Большой класс

  3. Длинный список параметров

  4. Расходящиеся модификации

Имеют место тогда, когда один класс часто модифицируется разными способами по разным причинам. Распространенный способ – выделить участки, подвергающиеся изменениям, и объединить их в новом классе.

  1. «Стрельба дробью»

Имеет место тогда, когда при выполнении любых модификации приходится вносить изменения в большое число классов. Решение – также свести все изменения в один класс.

  1. Завистливые функции

Метод, к-ый больше обрабатывает данные и вызывает функции другого класса, а не своего «родного». Такой метод лучше переместить в соотв.класс.

  1. Группы данных

Часто встречающиеся связки данных (которые лучше также поместить в отдельный класс)

  1. Одержимость элементарными типами

  2. Операторы типа switch

  3. Параллельные иерархии наследования

Особый случай «стрельбы дробью». При порождении подкласса одного из классов приходится создавать подкласс другого класса.

  1. Ленивый класс

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

  1. Теоретическая общность

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

  1. Временное поле

Когда в нек.объекте свойство устанавливается/меняется только при нек.обстоятельствах (вспомогательные переменные помещаются в свойства класса).

  1. Цепочки сообщений

Проблема, если слишком длинная.

  1. Посредник

Проблема если слишком много методов делегирования.

  1. Неуместная близость

Нарушение принципа информационной закрытости.

  1. Альтернативные классы с разными интерфейсами

  2. Неполнота библиотечного класса

  3. Классы данных

  4. Отказ от наследства

Если потомку не нужны многие свойства и методы родителя.

  1. Комментарии

Излишние комментарии.

ЛЕКЦИЯ 10. Рефакторинг. Реорганизация функций и данных.

КАТЕГОРИИ:

Составление методов.

Перемещение функций между объектами.

Реорганизация данных.

Упрощение вызовов методов.

СОСТАВЛЕНИЕ МЕТОДОВ.