Увидел свет релиз распределенной системы управления исходными текстами 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 stable@k.org # for v3.2 and up» будет обрезана до «Cc: Stable Kernel stable@k.org»;
- Добавлена команда «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).