Команды удобства
Git построены на обычном однопользовательском рабочем процессе с единой проверкой.
Его основные команды ... не так ограничены. То, о чем вы просите, легко.
outputid=$(myscript | git hash-object -w --stdin)
treeid=$(echo 100644 blob $outputid$'\t'script-output | git mktree)
branchnow=$(git rev-parse -q --verify output-branch)
git update-ref refs/heads/output-branch $(
git commit-tree ${branchnow:+-p $branchnow} -m 'script output' $treeid
)
Первая строка - это «добавить результат myscript
в репо и сохранить его идентификатор».
Вторая - «сделать путь к этому добавленному содержимому и сохраните идентификатор этого каталога "
Третий -" проверьте, есть ли уже история "
Четвертый и остальные, в частности, используйте модификатор расширения :+
, проверьте переменная, и если в ней что-то есть, расширьте до того, что я здесь привожу, поэтому ${branchnow:+-p $branchnow}
заменяется на ничто, если нет существующей истории веток, или -p $branchnow
, если уже есть история. commit-tree
и update-ref
делают именно то, что они делают: возвращают идентификатор для вновь созданной фиксации созданного вами моментального снимка и (повторно) навешивают метку кончика ветки output-branch
на эту фиксацию.