У меня есть две папки:
- ОРИГИНАЛ /
- ORIGINAL_AND_MY_CHANGES /
У моего друга есть копия ОРИГИНАЛА /. Я хотел бы сгенерировать MY_CHANGES.tgz - он должен содержать только новые / измененные файлы из ORIGINAL_AND_MY_CHANGES / по сравнению с ORIGINAL /. Так что мой друг может распаковать его в свою копию ORIGINAL / и получить ORIGINAL_AND_MY_CHANGES /. Как я могу это сделать?
PS Я пытался, diff
но он не может сохранить двоичные данные и rsync --link-dest
- он создает жесткие ссылки, которые бесполезны в архиве.
PPS В моем случае время модификации не может быть использовано, чтобы решить, какой файл был изменен.
Ответы:
С rsync
То, что вы делаете, по сути является инкрементной резервной копией: у вашего друга (вашей резервной копии) уже есть исходные файлы, и вы хотите создать архив, содержащий файлы, которые вы изменили по сравнению с этим оригиналом.
Rsync имеет функции для инкрементного резервного копирования.
-a
означает сохранить все атрибуты (время, собственность и т. д.).-c
означает сравнивать содержимое файла и не полагаться на дату и размер.--compare-dest=/some/directory
означает, что файлы, идентичные в этом каталоге и в исходном дереве, не копируются. Обратите внимание, что путь относительно каталога назначения.Rsync копирует все каталоги, даже если там нет файлов. Чтобы избавиться от этих пустых каталогов, запустите
find -depth CHANGES_ONLY -type d -empty -delete
(или, если у васfind
нет-delete
и-empty
, запуститеfind -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).Затем сделайте архив из
CHANGES_ONLY
каталога.Пешеходный путь
Пройдите по каталогу с вашим файлом. Пропустить файлы, которые идентичны оригиналу. При необходимости создайте каталоги в целевой папке. Скопируйте измененные файлы.
источник
ORIGINAL
и сделатьORIGINAL_AND_MY_CHANGES
ветку? Тогда узнайтеCHANGES
с помощью команды scm.ORIGINAL
это исходники платформы Android (3ГБ, 126000 файлов). Даже запуск rsync занимает ~ 15-20 минут. Я думаю, что добавление всего этого материала под контроль исходного кода займет слишком много места и времени.Команда
создаст пакетный файл, содержащий необходимые изменения (без каких-либо изменений).
Патч может быть применен на другом сайте, где вы берете пакетный файл, с
источник