Перекрестная платформа git крючки

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

Любые рекомендации, рекомендуемые для этого сценария?

Ответы

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