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