git archive
будет принимать пути в качестве аргументов. Все, что вам нужно сделать, это:
git archive -o ../latest.zip some-commit $(git diff --name-only earlier-commit some-commit)
или если у вас есть файлы с пробелами (или другими специальными символами), используйте xargs:
git diff --name-only earlier-commit some-commit | xargs -d'\n' git archive -o ../latest.zip some-commit
Если у вас неправильно установлены xargs, вы можете приготовить альтернативу:
#!/bin/bash
IFS=$'\n'
files=($(git diff --name-only earlier-commit some-commit))
git archive -o ../latest.zip some-commit "${files[@]}"
Написан как скрипт оболочки, но также должен работать как однострочный. В качестве альтернативы, измените earlier-commit
, some-commit
и ../latest.zip
на $1
$2
и $3
, и вы получите многократно используемый скрипт.