Релиз распределенной системы управления исходными текстами Git 1.8.1

02.01.2013 12:29

Увидел свет релиз распределенной системы управления исходными текстами Git 1.8.1. Git является одной из самых эффективных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются криптографические методы, также возможна привязка цифровых подписей разработчиков к тегам и коммитам. Из проектов, разрабатываемых с использованием Git, можно отметить ядро Linux, Android, Libreoffice, Systemd, X.Org, Wayland, Mesa, Gstreamer, Wine, Debian, DragonFly BSD, Perl, Eclipse, GNOME, KDE, Qt, Ruby on Rails, PostgreSQL, VideoLAN, PHP.

В анонсе новой версии отмечается, что в одном из будущих значительных выпусков Git будет изменено поведение команды "git push" по умолчанию. В ситуации когда при выполнении "git push" явно не указано что именно помещать в репозиторий ранее использовалась семантика "matching", при которой для обновления выбирались все внешние ветки и теги с именами, совпадающими с локальными. В будущем поведение будет изменено и по умолчанию будет применяться семантика "simple", при которой изменения отправляются только из текущей ветки в ветку с тем же именем, в случае если локальная ветка назначена для интеграции с удалённой веткой. Переопределить новое поведение можно через конфигурационную переменную "push.default".

Кроме того, в одном из будущих выпуском может быть прекращена поддержка команды "git branch --set-upstream", которая объявлена устаревшей из-за того, что не редки случаи указания по ошибке "git branch --set-upstream origin/master", что приводило к созданию локальной ветки "origin/master" для интеграции с текущей загруженной веткой, что явно отличается от того, что ожидал получить пользователь. В качестве замены следует использовать команду "git branch [-u|--set-upstream-to]". Окончание "-to" поможет исключить ошибочную трактовку назначения опции;

Из изменений в Git 1.8.1 можно отметить:

  • Для tcsh и zsh добавлены скрипты для автодополнения опций командной строки git;
  • В директорию contrib/completion добавлен скрипт "git-prompt" для раскраски подсказок в приглашении ввода;
  • Убрано обходное решение для проблемы в утилите less, приводящей к молчаливому завершению работы при изменении размера терминала. Проблема устранена в релизе less 406, выпущенном ещё в 2007 году;
  • При выполнении команды "git checkout" теперь выводится информация о том, насколько значительны расхождения с внешней веткой и приводятся советы как осуществить синхронизацию веток через операции push или pull;
  • При выполнении "git config --get" в случае наличия дублирующихся опций в файле конфигурации, вместо вывода ошибки теперь применяется последнее заданное значение;
  • Добавлена конфигурационная директива "diff.context" для задания числа строк по умолчанию, выводимых в качестве контекста до или после изменённой строки (по умолчанию 3);
  • В команду "git format-patch" добавлена опция "--notes=ref" для указания примечания к коммиту, после вывода строки "---";
  • Команда "git log -p -Sстрока" отныне осуществляет поиск строки после использования фильтра textconv (ранее поиск выполнялся без преобразования блобов);
  • В "git log --grep=pcre" теперь учитываются особенности регулярных выражений Perl, если в конфигурации задана директива "grep.patterntype = perl";
  • В команде "git replace -d объект" объект теперь может интерпретироваться не только по полному имени, но и в форме хэша SHA-1;
  • Команда "git rm $submodule" может быть использована для удаления рабочего дерева субмодуля без потери встроенных в него репозиториев;
  • В команде "git send-email" теперь запрещено указание после "Cc:" лишних строк после email, например, строка "Cc: Stable Kernel stable@k.org # for v3.2 and up" будет обрезана до "Cc: Stable Kernel stable@k.org";
  • В команду "git submodule add" добавлена опция "--name" для добавления нового субмодуля из директории уже содержащей субмодули;
  • В команду "git submodule sync" добавлена опция "--recursive";
  • Добавлена переменная конфигурации "diff.submodule" для задания используемой по умолчанию опций для команды "git diff --submodule";
  • В команду "git symbolic-ref" добавлена опция "-d $symref" для удаления именованных символических ссылок;
  • В "git cvsimport" добавлена поддержка указания часового пояса для каждого автора;
  • В состав включён вспомогательный внешний интерфейс (remote-helper) для взаимодействия с репозиториями Subversion;
  • Добавлен новый remote-helper для Mercurial;
  • Добавлена поддержка сборки в окружении Cygwin с новым набором заголовочных файлов;
  • Обновлён код поддержки сборки с использованием инструментария MinGW;
  • Произведена оптимизация логики генерации начального списка доступных ссылок из "upload-pack", выполняемая на другой стороне соединения при запуске "git fetch";
  • Проведена оптимизация логики поиска набора атрибутов, соответствующих указанному пути;
  • Для ускорения команд "git diff-index" и "git update-index" задействован предварительно загружаемый индекс, что позволило повысить скорость работы на системах с медленным вызовом функции stat (в том числе в Linux).