Системы контроля версий

по английски Version Control System (VCS)

по сути просто программа которая решает три основных задачи

  • Отслеживает процесс изменения файлов

  • Позволяет откатится на любой момент времени

  • Организует командную разработку

Наивная система контроля

Первое поколение

Локальные системы контроля версий

  • 1972 г. -  SCCS (Source Code Control System)
  • 1982 г. -  RCS (Revision Control System)
  • Версирование работало на уровне отдельного файла
  • Для каждого файла создавался отдельный служебный файл в котором фиксировались дельта-изменения
  • Работа с файлами шла через команды checkout и checkin
  • При команде checkout файл удалялся из проекта и открывался на редактирование
  • При выполнении команды checkin, файл возвращался на место, а в специальный служебный файл сохранялось дельта-изменение

Второе поколение

Централизованные системы контроля версий

  • 1986 CVS (Concurrent Versions System)
  • Обертка над RCS
  • Добавилась возможность хранить историю проекта целиком
  • Вся информация об истории была вынесена в отдельную папку
  • Поддерживало клиент серверную архитектуру

Репозиторий

Локальный компьютер

Версия 3

Версия 3

Версия 2

Версия 1

Версия 3.1

отредактировали

отправили изменения

Версия 3.1

Второе поколение+

Все еще централизованные системы контроля версий

  • 2000 SVN (Apache Subversion)
  • Довела до ума идем CVS. Разработано с нуля, уже не обертка над RCS
  • Добавилась атомарность операций и транзакции
  • Полная поддержка папок и отслеживание переименований файлов
  • Поддержка атрибутов файлов (скрытые, системные и т.д.)

Третье поколение

Децентрализованные системы контроля версий

  • 2000 BitKeeper 
  • 2005 Mercurial
  • 2005 Git
  • Теперь каждый пользователь хранит на своем компьютере весь репозиторий с историей
  • Сильно упрощена работа с ветками
  • Пропала зависимость от главного репозитория
  • Улучшена безопасность
  • Ускорение большинства операций

Репозиторий

Версия 3

Версия 2

Версия 1

Репозиторий

Версия 3

Версия 2

Версия 1

Репозиторий

Версия 3

Версия 2

Версия 1

Используется для синхронизации между разработчиками

Репозиторий

Версия 3

Версия 2

Версия 1

Установка git

git

Скачиваем https://git-scm.com

Создание
репозитория

Добавление файлов
в репозиторий

git add

История

Lab.iml

Файл

Файл

Файл

Новые

Файл

Файл

Файл

Файл

Файл

Файл

Файл

Файл

Отслеживаемые

Stage

Lab.iml

Файл

Файл

Файл

Файл

Файл

Файл

Файл

git add

git commit

Фиксирование изменений

git commit

Просмотр журнала изменений

git log

Исключение файлов из репозитория

.gitignore

Путешествия во времени

git checkout

Ветки

git branch

фикс бага 1

фикс бага 2

фикс бага 3

фикс бага 4

фикс бага 5

фикс бага 6

начали делать фичу 1

продолжаем писать фичу

закончили писать фичу

История

Фичу нельзя пускать в продакшен
пока она не будет доделана

Веточка пошла

Слияние веток

git merge

фикс бага 1

фикс бага 2

фикс бага 3

фикс бага 4

фикс бага 5

фикс бага 6

начали делать фичу 1

продолжаем писать фичу

закончили писать фичу

История

Фичу нельзя пускать в продакшен
пока она не будет доделана

Работа с удаленным репозиторием

Работа с репозиторием
в IDEA

IDEA

git status

git diff

git commit

public class Triangle {
    public int a;
    public int b;
    public int c;

    public Triangle(int a, int b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}

// массив
ArrayList<Triangle> items = new ArrayList<>();
items.add(new Triangle(1, 2, 2));
items.add(new Triangle(3, 5, 6));
items.add(new Triangle(6, 7, 2));

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

Реализованную функцию вызвать с лямбдой два раза:

  • первый раз пусть выводит длину стороны a
  • второй раз пусть выводит периметр

Мини контра

Made with Slides.com