Git: как бороться с разными shebang

Как люди имеют дело с разными shebangs между местными и удаленными?

Например, моим локальным питоном является /usr/bin/python, тогда как мой веб-хост представляет собой специально построенный питон в ~/local/bin/python. Ведущий разработчик может иметь рубин в /usr/bin/ruby, тогда как мой -/usr/local/bin/ruby.

Я вручную редактирую shebang, но затем git отмечает это как изменение. В идеале я хотел бы, чтобы git игнорировал первую строку файла или, возможно, игнорировал соответствие регулярных выражений строк в файле.

Мне кажется, что это должна быть очень распространенная проблема, но я не могу найти упоминания об этом.

Я использую git, но я бы не стал называть себя экспертом каким-либо образом.

Ответ 1

Измените его на

#!/usr/bin/env python

или

#!/usr/bin/env ruby

Затем он должен работать на всех ваших системах, если у вас есть python и ruby ​​в вашей переменной среды PATH.

Ответ 2

Решение вашей проблемы - это правило git s smudge/clean filter. Это позволяет вам настроить фильтры, которые будут модифицировать файлы при проверке и отменять эти изменения при проверке. Вот хорошая графика:

enter image description here

Сначала настройте фильтры, которые могут внести изменения в обоих направлениях, добавив к вам что-то вроде следующего: .git/config. Фильтр smudge преобразует файл в репо в рабочую копию, чистый фильтр отменяет это изменение. Важно, чтобы при запуске smudge → clean выводился именно исходный файл. Представленные здесь фильтры заменят первую строку #!~/local/bin/python в рабочей копии, если она #!/usr/bin/env python в репо

[filter "pyshebang"]
    smudge = sed '1s?^#!/usr/bin/env python$?#!~/local/bin/python?'
    clean = sed '1s?^#!~/local/bin/python$?#!/usr/bin/env python?'

Теперь активируйте этот фильтр, добавив такую ​​строку в .git/info/attributes (создайте этот файл, если он не существует):

*.py filter=pyshebang

Если ваши файлы python не заканчиваются на .py, просто настройте фильтр на правильные файлы/всю папку/все файлы. Если вы правильно настроите фильтр, он все равно будет изменять файлы с помощью python shebang.

Я бы рекомендовал прочитать smudge filters, чтобы понять детали того, что происходит.

Ответ 3

Это относится к комментариям, но пока у меня недостаточно репутации... Вы можете просто удалить хеш-ханг и всегда запускать его с помощью python, когда вы запускаете его из командной строки... может быть...