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 )