ГЛАВА 23 · СТР. 1544

Первый проект на GitHub: SafeSort

Пишем программу, которая наводит порядок в файлах, — и доводим её до состояния, готового для GitHub: тесты, история коммитов, Pull Request.

~16-20 часов один проект, 6 частей 24 практики: 18 SafeSort + 6 домашних
GitHubПервый проект, доведённый до Pull Request на GitHub

В этой главе мы построим программу, которая наводит порядок в захламлённой папке — и доведём её до состояния, в котором её можно показать на GitHub: с тестами, историей коммитов и Pull Request.

код working tree → staging → commit GitHub push → PR → CI
Было
Downloads/
report.pdf
IMG_4912.jpg
archive.zip
notes.txt
photo-copy.jpg
Стало
Downloads/
Sorted/
documents/
report.pdf
images/
IMG_4912.jpg
photo-copy.jpg
archives/
archive.zip
other/
notes.txt
SafeSort раскладывает файлы по категориям и находит одинаковые (photo-copy.jpg — не «пропавший» файл, а его копия).
Пользовательзапускает командуSafeSortscan / plan / apply /duplicates / undoФайловая системачитается или меняется
Программа не делает ничего без явной команды пользователя.
Только читают
scan — показывает файлы
plan — показывает план перемещений
duplicates — показывает совпадения
Меняют файлы
apply — перемещает файлы
undo — возвращает файлы на место
~/safesort $ safesort plan ~/Downloads
9 move operations planned.
No files have been changed.
plan только показывает, что произойдёт — apply понадобится отдельно.
23.1Что мы будем создавать: SafeSort1547Что такое Git и что такое GitHub1554Устанавливаем Git1557Первая настройка Git1559Учётная запись GitHub1562HTTPS, SSH и аутентификация1563Настраиваем SSH1565Создаём репозиторий SafeSort1567Клонируем репозиторий1569Локальный и удалённый репозиторий1571Ветка, HEAD и origin/main1573Repository и GitHub Project1576Лучшие практики Project1578Создаём GitHub Project1580Board, Table и Roadmap1581Поля Project1583Черновики: задача без Issue1585Превращаем черновик в Issue1587Создаём Issues1588Первый цикл: Issue → Branch → PR1591Необязательно · Копируем Project1593Необязательно · Редактируем элементы1594Необязательно · Фильтруем и группируем1596Необязательно · Представления1598Необязательно · Автоматизация1599Необязательно · Архив1602Необязательно · Шаблоны1603Необязательно · Insights160523.2Создаём репозиторий проекта160623.3Первый README проекта161123.4Планируем структуру Python-пакета161423.5pyproject.toml и установка проекта161923.6Командная строка SafeSort162123.7pathlib: работаем с путями и каталогами162523.8Сканируем каталог162723.9Какие каталоги не нужно сканировать163123.10Определяем категорию файла163423.11От анализа к плану действий163723.12Режим предварительного просмотра164023.13Безопасно перемещаем файлы164323.14Что делать, если имя уже занято164923.15Журнал выполненных операций165123.16Отмена последней операции165423.17Поиск одинаковых файлов165723.18SHA-256 и хеш содержимого файла165923.19Находим группы дубликатов166123.20Обрабатываем ошибки файловой системы166523.21Добавляем журнал работы программы166823.22Настройки проекта167023.23Пишем первые автоматические тесты167423.24Проверяем сканирование и классификацию167723.25Проверяем перемещение и отмену167823.26Проверяем поиск дубликатов168023.27Проверяем интерфейс командной строки168223.28Самопроверка изменений и дисциплина коммитов168423.29GitHub: применяем Issue, ветку и Pull Request168623.30GitHub Actions: автоматически запускаем тесты168923.31Документация, версия и первый релиз169223.32Итоги: полный путь проекта от идеи до релиза1698Приложение: шесть мини-проектов для GitHub