Как создать патч для всего каталога, чтобы его обновить?

Я знаю, что уже есть несколько потоков, но никто не полностью объяснил, как выполнить первоначальный diff для создания файла патча, а затем как применить этот патч к исходному каталогу для его обновления.

В моем случае есть каталог файлов, которые каждый может скачать из Интернета. Я взял этот каталог и внес изменения в него, и хочу создать файл патча, чтобы другие могли применить его к загруженному каталогу, чтобы точно воспроизвести то, что у меня есть в моей модифицированной директории.

Помощь? Что мне нужно, чтобы рассказать другому человеку о том, как применить мой патч?

Ответ 1

У меня была такая же проблема - много советов о том, как это сделать наполовину. Итак, вот что я сделал, чтобы получить как исправления, так и распаковку:

Чтобы создать файл исправления:

  • Поместите копии обоих каталогов в say/tmp, чтобы мы могли создать патч файл, или если храбрый, получите их бок о бок - в одном каталоге.

  • Запустите соответствующий diff для двух каталогов, старых и новых:

    diff -ruN orig/ new/ > file.patch
    # -r == recursive, so do subdirectories
    # -u == unified style, if your system lacks it or if recipient
    #       may not have it, use "-c"
    # -N == treat absent files as empty
    

Если у человека есть каталог orig/, он может воссоздать новый, запустив патч.

Чтобы создать новую папку из старой папки и файла исправления:

  • Переместите файл исправления в каталог, в котором существует каталог orig/folder

  • Эта папка будет сбита, поэтому держите ее где-то в резервной копии, или используйте копию.

    patch -s -p0 < file.patch
    # -s == silent except errors
    # -p0 == needed to find the proper folder
    
  • В этот момент папка orig/содержит новый/контент, но все же имеет свое старое имя, поэтому:

    mv orig/ new/    # if the folder names are different
    

Ответ 2

Ознакомьтесь с библиотекой Scarab С++ с открытым исходным кодом: https://github.com/loyso/Scarab

Это точно то, что вы описали. Он создает diff файл с использованием библиотеки xdelta и помещает его в архив. Вы можете перераспределить этот пакет и применить разницу. Существуют двоичные файлы для Win32.

Я автор проекта Scarab.