Вы можете использовать фильтр:
git config filter.dropSecondLine.clean "sed '2d'"
Отредактируйте/создайте.git/info/attributes и добавьте:
* filter=dropSecondLine
Если вы не хотите, чтобы фильтр действовал на все файлы в репозитории, измените *, чтобы он соответствовал соответствующему шаблону или имени файла.
В результате рабочий каталог останется прежним, но у больших двоичных объектов репо не будет второй строки в файлах. Поэтому, если вы потянете его в другом месте, вторая строка не появится (результат sed 'd2' ). И если вы измените вторую строку вашего файла журнала, вы сможете добавить ее, но не зафиксировать, так как изменение большого двоичного объекта происходит при добавлении, и в этот момент это будет тот же файл, что и в репо.
Can I call gtar first, and then tar as a fallback, as a one-liner, writing the arguments only once?
Чтобы ответить на этот вопрос :, это можно сделать как простую реализацию хранения аргументов в массиве. (Баш/кш/зш. См. Как запустить команду, хранящуюся в переменной? для решения проблем и обходного решения, совместимого с POSIX -.)
args=(--sort=name --owner=root:0 --group=root:0 --mtime='UTC 2020-01-01' -cvf api.tar api)
if ! tar "${args[@]}"; then
echo "using 'tar' failed, retrying with 'gtar'" >&1
gtar "${args[@]}"
fi
или в виде одного -вкладыша, если вы настаиваете:
tar "${args[@]}" || gtar "${args[@]}"
Хотя это не говорит , почему это не удалось, и попытается повторить попытку с другим tar, даже если проблема в чем-то вроде -недоступного каталога.
Другим вариантом может быть повторный запуск команды только в том случае, если первая ошибка «команда не найдена». В этом случае оболочки обычно устанавливают $?
на 127. Конечно, для этого нужно сначала перевернуть gtar
, так как tar
, вероятно, существует в той или иной форме.
gtar "${args[@]}"
ret=$?
if [ "$ret" = 127 ]; then
tar "${args[@]}"
ret=$?
fi
Тест [ "$? = 127 ]
уничтожает значение $?
, поэтому при необходимости добавляется дополнительная переменная для хранения фактического статуса выхода.
В конкретном случае с двумя тарами ответ Кусалананды о предварительной проверке также является хорошим решением.