Проблемы с использованием git diff для создания списка файлов для развертывания
Я хочу использовать что-то вроде следующей команды для создания архива для развертывания:
tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def`
Команда inner git diff создает список файлов с относительным, включая относительный путь, когда я запускаю ее отдельно.
Однако у меня две проблемы: мне нужно иметь возможность автоматически экранировать пробелы в выводе, поэтому tar не жалуется на файлы, содержащие пробелы, и когда tar создается, все файлы имеют дублированный `` скрытый файл '' перед ним стоит '.' которые не отображаются с ls -al . Это метафайлы, специфичные для OSX, как отмечает kch.
В любом случае, кто-нибудь знает решение этих проблем, или есть простой более простой способ написать это?
Ответов (6)6
Ты можешь попробовать
eval tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def | while read x; do echo "'""$x""'"; done`
или попробуйте то же самое с помощью sed, или
IFS='
' tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def`
Обратите внимание, что в IFS есть только одна новая строка.
Однако, если имена ваших файлов содержат символы новой строки, вы обречены.
Скрытые файлы с точками - это файлы с подчеркиванием точек?
Если у foo
вас есть другой файл ._foo
, и вы работаете на Mac, то файл с подчеркиванием точки - это место, где хранятся вилка / метаданные файлового ресурса.
Что касается вывода git, можно попробовать пропустить его по конвейеру sed
или perl
для цитирования. Я считаю, xargs
что здесь тоже может помочь.
Почему бы не использовать --files-from=FILE
или -T FILE
вариант tar, где ФАЙЛ может быть '-' для обозначения стандартного ввода?
git diff --name-only 0abc 1def | tar -T - cjf ~/deploy.tar.bz2
У вас не должно быть проблем с пробелами или табуляцией в именах файлов, или с одинарными кавычками, или обратными кавычками, или обратными косыми чертами (я думаю, что ваше решение будет иметь проблемы с одинарными кавычками "'" в имени файла). У вас могут возникнуть проблемы с символами новой строки в именах файлов, как и в решении IFS.