Pull to refresh

Вышел git 2.3

Reading time2 min
Views39K
Приветствую вас, коллеги! Сегодня утром гитхаб опубликовал подробную статью о свежевышедшой версии git. Забрать ее, как обычно, можно на официальном сайте, а под катом — краткий перевод что нового и интересного: push-to-deploy, ручное управление параметрами SSH, способ предотвратить зависание cron скриптов с клиентом git и многое другое.



Push to deploy



Возможность сконфигурировать удаленный репозиторий таким образом, что полученный push автоматически делает checkout (при условии что на этом компьютере не было локальных изменений, конечно же). Эта функция удобна для тестового и внутреннего deploy: не нужно устанавливать дополнительные скрипты, push на сервер автоматически меняет его файлы в рабочей копии, а не только добавляет их в репозиторий.

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


Быстрое клонирование с учетом уже клонированного локального репозитория



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

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


Более консервативное поведение git push по умолчанию



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

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


Параметры подключения к SSH теперь можно задать вручную



С помощью переменной окружения 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".


Все



Если я что пропустил, неправильно понял или неправильно перевел — пишите.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+73
Comments35

Articles