Кросс-платформенные крючки - PullRequest
16 голосов
/ 08 марта 2011

Как вы управляете перехватчиками git pre / post commit на разных платформах (скажем, * nix и windows)?

Какие рекомендации рекомендуются для этого сценария?

1 Ответ

11 голосов
/ 08 марта 2011

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% пути.После этого проведите тестовый тестовый тест во всех различных средах, на которые вы ориентируетесь.

...