Не только Git…
Заметка про PipEnv
Pipenv: Python Dev Workflow for Humans
- Вариант venv, хранящий окружение и кеши отдельно 
- Привязывает окружение к каталогу
- Что-то дополнительно проверяет в окружении
- Не засоряет каталог проекта (только конфиг и статус-файл)
- Хранит всё неизвестно где, и вставляет это неизвестно где в $PATH 
 Пример.
 Пример.  
Git: DVCS
- Хранение
- Версионирование
- Работа с историей изменений в виде орграфа
- Документирование процесса разработки 
- Маркировка отдельных коммитов - В т. ч. аннотированные и подписанные теги
 
Организация взаимодействия при совместной разработке
Классическая модель (если не будет хватать времени, рассмотрим только её):
- Один публичный репозиторий, т. н. «апстрим»
- Разработчики синхронизуются с ним
- merge request-ом является электронное письмо с приложенным набором патчей - в git есть поддержка этого процесса (gitsend-email) 
 
- Майнтейнер публичного репозитория делает git am и ревью, и публикует реультат 
Открытая модель:
- Апстрим — один публичный репозиторий, в котором собирается работа всех участников - более жёсткая дисциплина «Precious source»: в этот репозиторий делается только pull и review
 
- Разработчики синхронизуются с ним
- Индивидуальные публичные репозитории всех участников
- Решённые (под)задачи участники публикуют в индивидуальных публичных репозиториях
- merge request-ом является оповещение о готовности индивидуального репозиотрия к merge-у со стороны исполнителя (ссылка на commit-ish — коммит, тег, ветку и т. п.)
- Майнтейнер апстрима делает git pull и ревью, и публикует реультат 
Модель общего хостинга:
- В плане использования GIT совпадает с открытой моделью 
- Все дополнительные инструменты разработки могут быть привязаны к git или даже управляться тегами, но в самом git отсутствуют
- Выделяют «pull request» (GitHub) или «merge request» (GitLab) в качестве отдельного информационного объекта и обеспечивают (полу)автоматическую его обработку. - Важно: понятие merge/pull request в самом git отсутствует, и у него нет чёткого определения
 
- Предоставляет тематическую социальную сеть с привязкой к исходным текстам и информационным объектам процесса разработки
- Предоставляет технологические ресурсы по сборке и тестированию
Централизованная модель:
- Один репозиторий для всех
- Чёткие конвенции для push и pull
- Использование веток в т. ч. для индивидуальной разработки - Решённые (под)задачи участники публикуют в том же самом репозитории в специально выделенных личных ветках разработки
 
- Важно: раздельных прав доступа на части репозитория в git нет, это или договорённости или дополнительные свойства площадки
- А ещё это сводит на нет все достоинства DVCS
 Ветки и индивидуальные публичные репозитории — ортогональные сущности:
 Ветки и индивидуальные публичные репозитории — ортогональные сущности: 
- Ветки — для эшелонирования работ (например, разработки новой функциональности или разделения на devel - testing - deployment)
- Индивидуальные публичные репозитории — для разделения областей ответственности по исполнителям
- В индивидуальном репозитории могут быть какие угодно ветки, например, один и тот же человек может - заниматься разработкой новой фичи — иметь соответствующую ветку в своём публичном репозитории и слать pull-request-ы в ветку newfeature апстрима 
- заниматься багфиксом релизов и слать pull-request-ы в ветку production апстрима 
 
Работа с несколькими удалёнными репозиториями
git remote (ещё тут)
- Общая история
- Произвольная синхронизация
- Но: нет встроенных инструментов уведомления - (actually, есть — email — но даже он требует инфраструктуры ≠ git: почтовых серверов, email-клиентов и т. п.)
 
Информационно-технологическое пространство проекта разработки
- Общение — списки рассылки, «team discussion», чатики, you name it
- Документирование (самого проекта и дисциплины разработки в нём) — Wiki и иные системы публикации
- Issue tracking — ошибки / feauture requests - Workflow: open → discuss → solve → close (→ reopen → …)
- «Patches are welcome!»
 
- Частный случай: «pull request» (gitlab: merge request) - Инфопространство привязано к конкретным точкам разработки
- Эффективно в рамках единого хостинга (в остальных случах просто моделируется, например, тредом в списках рассылки)
- ⇒ может содержать удобные инструменты (например, итерация review)
- Но: «подход от решения»
 
- CI
- Работа с командой / статистика / аналитика / …
Д/З
зарегистрировать семестровый проект
- Завести один «precious source» репозиторий для merge и публикации проекта и персональные — для разработки (лидеру проекта допустимо вести разработку в отдельной ветке, заводить ещё один репозиотрий ненадо)
- Разработать драфт проектного задания; - Постановка решаемой задачи: один абзац или список фич
- Описание предполагаемых инструментов решения: какие сторонние модули будут использоваться, в рамках каких сервисов (если предполагаются)
- Макет интерфейса (обратите внимание на то, что от проекта требуется локализация ⇒ какой-то интерфейс с человеком должен быть - GUI/TUI — общий вид окошек, что в целом они делаю и как попадают из одного в другое
- Text — команды, диагностика (в общем плане — когда возникает и как посмотреть), режимы работы
- …
- Поместить проектное задание в README (или README.md) публичного репозиотория
 
 
- Зарегистрировать публичный репозиторий проекта в качестве вашего персонального issue на странице репозитория PythonDevelopment2022. В issue указать: - Короткую формулировку сути проекта
- Ссылку на публичный репозиторий проекта 
- Список участников проекта в виде: - ФИО, группа (факультет, если не ВМК) и nick, под которым появляются коммиты в репозитории
- ФИО, группа (факультет, если не ВМК) и nick, под которым появляются коммиты в репозитории …
 
 
