Ответ 1
Перехватчики git действительно не отличаются от любой оболочки script тем, что наилучшие практики для их "кросс-платформенной" применяются одинаково. Небольшое различие заключается в том, что вы также можете ориентировать уровни эмуляции Windows * nix в качестве основных пользователей этих перехватчиков, и они могут быть сравнительно искалечены по сравнению с наиболее актуальными средами Unix.
Я просто портировал крюк post-commit (и написал крюк pre-commit) по умолчанию git для Windows, который использует MINGW32. Несколько изменений, которые я должен был сделать с предыдущей версии, сделали некоторые предположения о доступной среде сценариев:
- no
readlink
, но в любом случае это было неэффективно для Windows, поэтому я просто взломал чекwhich readlink
и не использовал, если не было - перенаправление на
/dev/null
не работает в Windows, вместо этого вам нужно перенаправить наnul
, для этого я просто сделал проверкуuname -s
и установил переменную для перенаправления на - no
mktemp
, но поскольку это был каталог, который мы все равно обрезали, мы использовали наивно жестко-кодированное имя каталога - по какой-то причине перенаправление STDOUT через
exec >>$out
отлично работает в MINGW32, ноexec 2>>$err
для STDERR не работает (кажется, он умирает молча), поэтому, к сожалению, нам просто нужно было избежать этого перенаправления
Кроме этого, он работал очень хорошо, потому что это было потому, что в нем не было особого "материала" для конкретной платформы. Поэтому просто придерживайтесь лучших практик для создания кросс-платформенных скриптов, и это должно обеспечить вам как минимум 80% пути. После этого проверьте тестовый тест во всех различных средах, на которые вы нацеливаетесь.