Вышел git 2.3

cd28d8511e7b40339a532748c71e32d2.png Приветствую вас, коллеги! Сегодня утром гитхаб опубликовал подробную статью о свежевышедшой версии git. Забрать ее, как обычно, можно на официальном сайте, а под катом — краткий перевод что нового и интересного: push-to-deploy, ручное управление параметрами SSH, способ предотвратить зависание cron скриптов с клиентом git и многое другое. Возможность сконфигурировать удаленный репозиторий таким образом, что полученный push автоматически делает checkout (при условии что на этом компьютере не было локальных изменений, конечно же). Эта функция удобна для тестового и внутреннего deploy: не нужно устанавливать дополнительные скрипты, push на сервер автоматически меняет его файлы в рабочей копии, а не только добавляет их в репозиторий.

Авторы предупреждают, что использовать эту функциональность для deploy production серверов не рекомендуется, так как есть ряд побочных явлений:

Рядом с файлами рабочей копии будет директория .git, сокрытием которой от веб сервера нужно будет отдельно озаботиться. Файлы рабочей копии обновятся не атомарно, а по одному, так что на короткий промежуток времени файлы сервера могут оказаться в неконсистентном состоянии. Если после обновления файлов сервер требует сборки, то все равно нужно использовать скрипты. Новый ключ --dissociate позволяет во время клонирования забирать нужные файлы из указанного с помощью --reference локального репозитория: это позволяет сильно сократить время клонирования и нагрузку на сеть, если копия нужного репозитория уже есть где-то на диске:

git clone --reference …/oldclone --dissociate https://github.com/gitster/git.git

Помните, в последнее время при пуше веток гит постоянно рекомендовал установить «push.default», намекая что скоро поведение по умолчанию поменяется? Оно поменялось. Теперь, если имя локальной ветки отличается от имени upstream ветки, то git откажется делать push без указания remote, чтобы защитить вас от push не в ту ветку:

git checkout -b experimental origin/master git commit -a -m 'Experimental changes' # Вот это теперь не сработает — разработчик явно хочет сделать push в 'experimental', а не в 'master'. git push

С помощью переменной окружения GIT_SSH_COMMAND теперь можно точно сконфигурировать как git будет использовать ssh. Наконец-то можно легко делать разные приватные ключи для разных репозиториев без модификации user-wide »~/.ssh/config»:

GIT_SSH_COMMAND='ssh -i git_id' git clone host: repo.git

Установив переменную окружения GIT_TERMINAL_PROMPT в 0 можно отключить ввод пользователя. Это полезно, когда git вызывается из скрипта автоматизации и ввод пользователя не подразумевается — теперь при ошибках авторизации git не будет запрашивать логин/пароль и тем самым подвешивать cron скрипт.

Уменьшена ненужная перезапись файлов при сheckout чтобы файлы рабочей копии поменьше находились в неконсистентном состоянии при push-to-deploy. «git branch -d» (удаление ветки) и «git branch -m» (переименование ветки) теперь поддерживают ключ »--force». Если я что пропустил, неправильно понял или неправильно перевел — пишите.

© Habrahabr.ru