Написание git-хука для автоматического изменения кода во время локальных коммитов - PullRequest
3 голосов
/ 23 февраля 2010

Я хотел бы написать ловушку git, которая автоматически выполняет некоторую очистку кода, например удаляет завершающие пробелы. Легко написать скрипт для отклонения определенных коммитов, но я бы предпочел просто решить проблемы прозрачно, когда это возможно. Хотя я понимаю, что git имеет некоторую встроенную поддержку для подобных вещей (автоматическое преобразование новых строк и т. Д.), Но я бы хотел что-то более гибкое. Возможно ли это сделать с помощью хука перед фиксацией? Можете ли вы изменить индекс напрямую (или есть лучший способ сделать это)?

Я также понимаю, что в конечном итоге мне понадобится серверный хук, который отклоняет плохие коммиты для разработчиков, которые не используют локальный хук, но я хотел бы помочь тем, кто выбрал его. (Если есть возможность изменить код на сервере, это было бы еще лучше, но я не верю, что вы можете.)

1 Ответ

0 голосов
/ 23 февраля 2010

Вот пример использования драйвера фильтра для удаления конечных пробелов. Обратите внимание, что после того, как вы сделаете коммит, пробелы останутся в рабочей копии, пока вы не выполните проверку. Также обратите внимание, что пробел в скобках в приведенной ниже команде sed - это вкладка и пробел.

$ rm -rf .git
$ git init
Initialized empty Git repository in /private/tmp/foo/.git/
$ echo 'trailing white    ' > file
$ echo 'file filter=white' > .git/info/attributes
$ cat << EOF >> .git/config 
> [filter "white"]
>         clean = sed 's/[      ]*$//'
> EOF
$ git add file
$ git ci -m"Sample commit"
[master (root-commit) 654fa8d] Sample commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
$ git checkout -f master file
$ cat -tve file
trailing white$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...