Можете ли вы использовать tar для применения патча к существующему веб-приложению? - PullRequest
1 голос
/ 18 марта 2009

Патчи часто выпускаются для моей системы CMS. Я хочу иметь возможность извлекать tar-файл, содержащий исправленные файлы для последней версии, прямо поверх полной версии в моей системе разработки. Когда я извлекаю tar-файл, он помещает его в папку с именем tar-файла. Это оставляет меня, чтобы вручную скопировать каждый файл в основной каталог. Есть ли способ заставить tar извлечь файлы в текущий каталог и перезаписать любые файлы с одинаковыми именами файлов? Любые существующие каталоги не следует перезаписывать, а объединять ...

Возможно ли это? Если да, то какая команда?

Ответы [ 4 ]

2 голосов
/ 18 марта 2009

Извлеките аргумент --strip-components (или --strippath) для tar, возможно, это то, что вы ищете.

РЕДАКТИРОВАТЬ : вы можете добавить --keep-newer в микс, чтобы любые локально измененные файлы не перезаписывались И я бы предложил протестировать новые выпуски на сервере разработки, а затем использовать rsync или subversion для переноса изменений.

1 голос
/ 18 марта 2009

Я пытался заставить работать --strip-components и, хотя я и не старался, я не работал. Это продолжало выравнивать структуру каталогов. При поиске я наткнулся на следующую команду, которая, кажется, выполняет именно то, что я хочу:

pax -r -f patch.tar -s '/ patch ///'

Это не tar, но эй, он работает ... Замените слова "patch" на имя вашего tar-файла.

0 голосов
/ 30 декабря 2012

Я только что сделал:

tar -xzf patch.tar.gz

И он перезаписывает все файлы, которые содержит патч.

Т.е., если бы патч был создан для содержимого папки app, я бы распаковал его там. Результаты будут такими:

tar.gz contains: oldfolder/someoldfile.txt, oldfolder/newfolder/newfile.txt

до того, как приложение выглядит так:

app/oldfolder/someoldfile.txt

Впоследствии приложение выглядит как

app/oldfolder/someoldfile.txt
oldfolder/newfolder/newfile.txt

И "someoldfile.txt" фактически обновляется до того, что было в tar.gz

Может быть, это не работает с обычным tar, только tar.gz. Но я сомневаюсь в этом. Я думаю, что это должно работать для всего, если у пользователя есть права на запись.

0 голосов
/ 18 марта 2009

Опция '--strip-components' позволяет обрезать части встроенных имен файлов С этим можно делать то, что вы хотите.

Для получения дополнительной помощи проверьте http://www.gnu.org/software/tar/manual/html_section/transform.html

...