Git: ключи и слияние. Python: зависимости

Авторизация на удалённом хранилище

Отступление про SSH

Подробнее про SSH в прошлогодней лекции

Процедура слияния в GIT

Просмотри истории:

Применение веток для параллельной разработки

/!\ В этой лекции мы рассматриваем только неконфликтующие операции.

Слияние (merge):

Если «чистое» слияние невозможно (изменения в разных ветках затрагивают один и тот же контекст, и изменения неравны), конфликты следует устранить вручную, закоммитить и проложить слияние. /!\ Об этом в следующей лекции.

Процедура перебазирования в GIT

Ту же задачу — объединение двух вариантов истории — можно решить путём её переписывания (rebase). Как если бы ту же самую работу выполнили после совсем другого коммита.

См. замечание относительно конфликтов выше.

Сравнение с merge

Пример: неадекватный апстрим и набор фиксов в одной ветке

Для совместной разработки, тем не менее, merge намного удобнее — сохраняется история.

Зависимости при разработке на Python

Какие-то инструменты для выявления зависимостей?

Замечание про зачаточное состояние и непростую задачу учёта зависимостей в Python

(если успеем) Другие практические примеры.

Д/З

  1. Изучить правила игры Быки и коровы (похожая игра — Wordle

  2. Написать модуль bullscows.py, предоставляющий две функции:

    • bullscows(guess: str, secret: str) -> (int, int) — возвращает количество «быков» и «коров» из guess в secret

      • «быки» — это одинаковые буквы, которые в словах стоят в одинаковых местах, «коровы» — сколько букв догадки использовано в загадке

        • Например, bullscows("ропот", "полип") -> (1, 2) («о» — бык, «о» и «п» — коровы)

          • /!\ это условие не совпадает с Википедией, по правилам которой было бы (1, 1)

    • gameplay(ask: callable, inform: callable, words: list[str]) -> int — функция-приложение, обеспечивающая геймплей:

      1. Задумывает случайное слово из списка слов words: list[str]

      2. Спрашивает у пользователя слово с помощью функции ask("Введите слово: ", words)

      3. Выводит пользователю результат с помощью функции inform("Быки: {}, Коровы: {}", b, c)

      4. Если слово не отгадано, переходит к п. 1
      5. Если слово отгадано, возвращает количество попыток — вызовов ask()

    • Свойства функции ask():

      • ask(prompt: str, valid: list[str] = None) -> str

      • Если необязательный параметр valid не пуст, допустим только ввод слова из valid, иначе спрашивает повторно

    • Функция inform():

      • inform(format_string: str, bulls: int, cows: int) -> None

  3. Вызов python -m bullscows словарь длина должен запускать референс-реализацию игры:

    • словарь — это имя файла или URL (в этом случае необходимо его скачать, например, с помощью urllib)

    • длина — необязательный параметр, указывающий длину используемых слов (по умолчанию 5)

    • Реализация ask() — обычный input() (если нужно, в цикле с проверкой валидности)

    • Реализация inform() — обычный print()

    • В конце выводится количество попыток
    • Замечание: игра не совпадает с Wordle, потому что неизвестны позиции быков и коров, только количество
  4. Создать отдельную ветку cowsay, в которой функцию inform() и подсказку в функции ask() делают случайные коровы из модуля python-cowsay (именно этого)

    • В следующем коммите этой ветки нарисовать свою «корову» (небольшую) и использовать её для вывода подсказки ask().

  5. Создать в каталоге с решениями подкаталог 03_MergeRequirements (совпадающий с URL этой страницы) и положить каталог с решением туда

    • Соблюдать дисциплину оформления коммитов (одно изменение ­— один коммит, описание в commit message и т. п.)

LecturesCMC/PythonDevelopment2024/03_MergeRequirements (последним исправлял пользователь FrBrGeorge 2024-03-03 16:39:36)