Увидел свет релиз распределенной системы управления исходными текстами 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", при которой изменения отправляются только из текущей ветки в ветку с тем же именем, в случае если локальная ветка назначена для интеграции с удалённой веткой. Переопределить новое поведение можно через конфигурационную переменную "pus.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 или poll;
- При выполнении "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 [email protected] # for v3.2 and up" будет обрезана до "Cc: Stable Kernel [email protected]";
- Добавлена команда "git submodule add" для добавления нового субмодуля в текущем файловом пути;
- В команду "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).