1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-lmpythw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex29.md 6.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 03:52 f9ec0dd

Упражнение 29: diff и patch

Оригинал: Exercise 29: diff and patch

Переводчик: [Феликс Ли] (https://github.com/wizardforcel)

Лицензия: CC BY-NC-SA 4.0

Гордо использует Google Translate

Чтобы завершить четвертую часть, вы просто примените полный процесс TDD, который вы узнали, к проекту, с которым вы, возможно, не знакомы, но он более актуален. Обратитесь к упражнению 28, чтобы удостовериться, что вы понимаете этот процесс, и убедитесь, что строго следуете ему. Если это необходимо, создайте список проверок.

Предупреждение

Когда вы работаете в реальном мире, этот строгий процесс совершенно бесполезен. В данный момент вы изучаете этот процесс и внедряете его внутренне, чтобы использовать его в реальном мире. Вот почему я заставляю вас строго следовать ему. Это всего лишь практика, поэтому не будьте фанатиками, когда делаете настоящую работу. Цель этой книги — научить вас набору стратегий для выполнения работы, а не учить вас религиозной церемонии, которую можно распространять среди масс.

Часто задаваемые вопросыКоманда diff принимает два файла и генерирует третий файл (или вывод), содержащий изменения первого файла относительно второго. Она является основой для git и других систем контроля версий. Реализация команды diff в Python довольно проста, так как существует библиотека, которая может сделать это за вас, поэтому вам не придётся работать с алгоритмами (которые могут быть очень сложными).Инструмент patch является партнером команды diff, потому что он требует разностного файла и применяет его к другому файлу, чтобы сгенерировать третий файл. Это позволяет выбрать изменения между двумя файлами, запустить diff, чтобы сгенерировать разность, а затем отправить этот файл .diff кому-то. Этот человек может использовать свой оригинальный файл и .diff, чтобы восстановить ваши изменения с помощью patch.

Вот пример рабочего процесса, демонстрирующий работу diff и patch. У меня есть два файла A.txt и B.txt. Файл A.txt содержит несколько простых слов, а затем я копирую его и создаю файл B.txt с некоторыми изменениями:

$ diff A.txt B.txt > AB.diff
$ cat AB.diff
2,4c2,4
< её пух был белым в грязи
< и всюду, где шёл жених,
< её ягнёнок жевал траву
---
> её пух был белым в снегу
> и всюду, где шёл жених,
> её ягнёнок точно шёл

Это создает файл AB.diff, который содержит изменения файла A.txt относительно файла B.txt. Вы можете видеть, что это исправляет мои ошибки в рифме. Как только у вас есть файл AB.diff, вы можете применить патч, чтобы применить эти изменения.``` $ patch A.txt AB.diff $ diff A.txt B.txt


Последняя команда должна не выдавать никакого вывода, так как предыдущей командой `patch` сделал содержание файлов `A.txt` и `B.txt` одинаковым.Эти два элемента можно реализовать, начиная с команды `diff`, поскольку использование Python позволяет вам полностью реализовать `diff`. Вы можете найти его в конце документации модуля `difflib`, но попробуйте также реализовать свой вариант и сравните его с этим.Основной целью этого упражнения является использование инструмента `patch`, который не был реализован в Python. Вам придётся изучить класс `SequenceMatcher` в модуле `difflib` и особенно обратить внимание на функцию `SequenceMatcher.get_opcodes()`. Это единственный намёк на работу с `patch`, но это очень хороший намёк.

## Исследовательское обучение

Что вы сможете создать, объединив эти команды `diff` и `patch`? Можно ли сделать из них инструмент? Можно ли заставить их работать подобно мини-версии `git`?

## Глубокое изучение

Найдите как можно больше алгоритмов сравнения различий. Также стоит изучить принцип работы системы контроля версий `git`.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-lmpythw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-lmpythw-zh.git
oschina-mirror
wizardforcel-lmpythw-zh
wizardforcel-lmpythw-zh
master