Продукт не работает, если ветка развернута в другом рабочем каталоге с использованием git worktree
Буквально вчера нарвался на небольшую проблему при работе с сабжем.
Использую механизм worktree, положил нужную ветку в соседний рабочий каталог, делаю коммит, а мне выдается ошибка 'не удается найти .git/hooks/v8file-extractor.os'
Для решения хотел сделать копию продукта и положить в папку .git/hooks/, но нелья - существует файл .git для связи с корневым каталогом гит, и папку не создать.
Проблему решил временно - подменив путь в корневом каталоге в файле .git/hooks/pre-commit на ../КорневойКаталог/.git/hooks/v8file-extractor.os (правильный путь к корневому каталогу), сделал коммит и вернул обратно.
Хотелось бы уметь штатно работать и в режиме worktree
Могу ошибаться, но
#!/bin/sh
if ! [ -d .git/ ]
then
oscript -encoding=utf-8 $(cat .git|sed 's/^gitdir: //'|sed 's/.git\/worktrees\/.*//').git/hooks/v8file-extractor.os --git-precommit $(pwd)/src
else
oscript -encoding=utf-8 .git/hooks/v8file-extractor.os --git-precommit src
fi
Еще интересная информация https://longair.net/blog/2011/04/09/missing-git-hooks-documentation/ Можно использовать переменную среды GIT_DIR спасибо @bambr1975
вроде вот так универсально получится
#!/bin/sh
if ! [ -d .git/ ]
then
ppwd=`pwd`
cd $GIT_DIR
oscript -encoding=utf-8 ../../../.git/hooks/v8file-extractor.os --git-precommit $ppwd/src
else
oscript -encoding=utf-8 .git/hooks/v8file-extractor.os --git-precommit src
fi