Работа с исходным текстом
Передача файла:
diff и patch
patch -pN, diff -ru, .rej/.orig …
patchutils
Недостатки обмена патчами.
Задачи:
- Учёт версий
 - Доступное хранение всего кода
 - Поддержка совместной разработки
 
Учёт версий
SCCS (Source Code Control System, 1972г
 ) — маркировка файлов строковой константой (сохраняется в объектнике!) - RCS + история изменений (с вычислением дельты)
 
Хранение кода и совместная разработка
Общее название — VCS (Version Control System)
- CVS + централизованный сервер-хранилище
 - SVN = CVS «на стероидах»
 - …
 => совместная работа
- Дисциплина
 - Права доступа
 
- Просмотр истории 
- В т. ч. по коммитерам
 
 
Дисциплина обновления хранилища
Малый цикл (локальная модификация):
- Редактирование (до некоторого промежуточного результата)
 - Проверка того, что результат достигнут
 Регистрация изменений (commit)
В случае централизованного сервера с общим доступом превращается в большой цикл:
Обновление рабочей копии(pull)
- Редактирование. Не имеет смысла без (1)
 - Проверка
 - Регистрация изменений. Не имеет смысла без (5)
 Обновление хранилища (push).
Ветки
Большой цикл не всегда успешен => конфликт:
- Сделать commit побольше (когда всё готово)
 - Как можно чаще синхронизовать
 
=> Собственные версии хранилища, branches (ветки)
- до некоторого коммита имеют общую историю
 - далее ведутся как заблагорассудится
 
А обратно? => Слияние веток (merge). Дерево превращается в орграф.
- Алгоритмы слияния
 Конфликты (формат diff3)
DVCS
Не заталкивать всё на сервер, а скачивать друг у друга?
- Bazaar
 - Mercuirial
 - Git
 - Darcs
 - Monotone
 - …
 
Свойства:
- Полная локальная копия хранилища (+ы и -ы)
 - Необходимость публикации 
- Например,
 
 - Поддержка малого цикла обновления 
=> Одно изменение = один коммит
 - Необходимость организации информационного пространства 
теги (tags)
описание коммита (commit messages)
- аутентификация коммитеров (подпись)
 
 
Git
История: BitKeeper, Larry McVoy, Andrew Tridgell и Линус
Работа:
clone
Малый цикл: pull → (hack+ → add → commit)+
Исправление коммита git commit -amend
Публикация: push в своё публичное хранилище
Работа с произвольными исходниками:
git init
git add .
git commit -a -m "INITIAL"
git tag Start
- Малый цикл
 Если не понравилось: git reset --hard Start и git clean -f
Создание патчей git fotmat-patch Start
Всякое:
Полезные команды: git am, git stash, git rebase [--interactive]…
инфраструктура: GitHub, Gitorius etc.; gitolite, gitosis etc.; gitweb
Материалы
Их туча.
http://ru.wikipedia.org/wiki/Git в разделе ссылки
Д/З
Склонировать какой-нибудь SVN-рапозиторий (например, DOSBox)
- Посмотреть историю изменений
 Посмотреть на структуру каталогов (.svn в каждом каталоге)
Склонировать простой git-репозитарий (git://git.altlinux.org/people/george/packages/xfractint.git). Это исходники пакета, так что upstream лежит в подкаталоге xfractint/xfractint.
Приложить патч xfractint-20.04p10-patch (в корне репозитария)
- Откатить изменения
 Попробовать приложить патч xfractint-20.04p09-patch и попробовать разобраться, отчего он не приложился
Склонировать простой git-репозитарий (http://git.altlinux.org/people/george/packages/?p=greed.git;a=summary), собрать находящуюся в нём программу (greed/greed, см. выше про исходник пакета)
- Посмотреть историю изменений, теги и ветки
 посмотреть на структуру каталогов (.git в корне рапозитория)
- Сделать новую ветку, в которой поменять ширину поля с 80 на 64. 
- Пронаблюдать типичный способ, как не надо писать программу. Узнать фамилию автора. Печалиться о несовершенстве мира.
 
 - Смержить ветку с основной
 
Склонировать более сложный git-репозитарий (напр., https://github.com/timburks/nu)
- Посмотреть историю изменений и дерево коммитов
 - Посмотреть все ветки (включая те, что на сервере)
 - Поставить на свою машину какой-нибудь git-инструмент и насладиться деревом с ветками
 
