Git: как бороться с разными шебангами - PullRequest
11 голосов
/ 19 февраля 2011

Как люди справляются с разными шебангами между локальным и удаленным?

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

.

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

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

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

Ответы [ 3 ]

18 голосов
/ 19 февраля 2011

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

#!/usr/bin/env python

или

#!/usr/bin/env ruby

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

3 голосов
/ 28 апреля 2013

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

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 / attribute (создайте этот файл, если он не существует):

*.py filter=pyshebang

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

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

0 голосов
/ 28 апреля 2013

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

...