Состоялся (https://lkml.org/lkml/2017/8/4/481) выпуск распределенной системы управления исходными текстами Git 2.14.0 (http://git-scm.com/). Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Из проектов, разрабатываемых с использованием Git, можно отметить ядро Linux (https://git.kernel.org/cgit/linux/kernel/git/stable/linux-st.../), Android (https://android.googlesource.com/), LibreOffice (http://cgit.freedesktop.org/libreoffice), Systemd (http://cgit.freedesktop.org/systemd), X.Org (http://cgit.freedesktop.org/xorg), Wayland (http://cgit.freedesktop.org/wayland), Mesa (http://cgit.freedesktop.org/mesa/), GStreamer (http://cgit.freedesktop.org/gstreamer), Wine (http://source.winehq.org/git/wine.git), Debian (http://anonscm.debian.org/gitweb), DragonFly BSD (http://gitweb.dragonflybsd.org/?p=dragonfly.git;a=summary), Perl (http://perl5.git.perl.org/perl.git), Eclipse (http://git.eclipse.org), GNOME (http://git.gnome.org/browse/), KDE (https://projects.kde.org/projects), Qt (https://code.qt.io/cgit/), Ruby on Rails (https://github.com/rails/rails), PostgreSQL (http://git.postgresql.org/gitweb/), VideoLAN (http://git.videolan.org), PHP (http://git.php.net/), Python (https://github.com/python/cpython), Xen (http://xenbits.xen.org/gitweb/), Minix (http://git.minix3.org/).
По сравнению с прошлым выпуском в новую версию принято 727 изменений, подготовленных при участии 66 разработчиков, из которых 18 впервые приняли своё участие в разработке. Основные изменения (https://github.com/git/git/blob/v2.14.0/Documentation/RelNot...):- В команде "git diff" по умолчанию задействован улучшенный алгоритм компоновки отступов, включающий дополнительную эвристику для корректного отображения логики изменений, в которых фигурируют повторяющиеся блоки. Для отключения эвристики в настройках следует указать "diff.indentHeuristic=false";
- При обработке Perl-совместимых регулярных выражений добавлена поддержка JIT-компиляции и обеспечена возможность сборки с библиотекой PCRE v2, которая теперь рекомендована для применения (ранее в git поддерживалась только сборка с библиотекой PCRE v1, сопровождение которой теперь ограничивается исправлением проблем критического характера). Для сборки с PCRE v2 вместо "USE_LIBPCRE=Yes" следует указать "USE_LIBPCRE2=Yes";
- Добавлена возможность настройки цветов имён текущей ветки и отслеживаемых внешних веток, отображаемых в выводе "git status --short --branch";- В команду "git clone" добавлена опция "--no-tags", позволяющая изначально не извлекать все теги и настроить tagopt, чтобы не следовать тегам при последующих выборках;
- В "git archive --format=zip" обеспечена поддержка расширения zip64 для создания архивов, превышающих 4 Гб;
- В "git reset" добавлена опция "--recurse-submodules" для рекурсивного обхода субмодулей;
- В "git diff --submodule=diff" по умолчанию обеспечен рекурсивный обход вложенных субмодулей;
- В "git repack" добавлена опция "--threads=n", указанное в которой число потоков также передаётся в pack-objects;
- В "git send-email" задействован запуск обработчика sendemail-validate для проверки и при необходимости блокирования сообщений перед их отправкой;
- Улучшено автоопределение путей, указанных при запуске команд вида "git cmdname --options" без их явного отделения от ревизий разделителем '--';
- В "filter-branch" добавлен псевдофильтр "--setup" для определения функций и переменных, которые могут использоваться в других фильтрах;- В "git send-email" добавлены опции "--batch-size" и "--relogin-delay" для обхода ограничений почтовых серверов, лимитирующих число сообщений, которые можно отправить в рамках одного сеанса;
- В "git pull --rebase --recurse-submodules" обеспечено выполнение операции rebase для ветки во всех привязанных субмодулях;
- По аналогии с "git grep" в "git log" добавлена опция "-P" как синоним "--perl-regexp";- Добавленный в Git 2.13 код для выявления в Git-репозиториях известных коллизий (https://www.opennet.me/opennews/art.shtml?num=46091) в хэшах SHA-1 теперь интегрирован в git.git как субмодуль (это первый субмодуль в git.git). Для получения данного субмодуля следует клонировать git.git с опцией "--recurse-submodules".
URL: https://lkml.org/lkml/2017/8/4/481
Новость: http://www.opennet.me/opennews/art.shtml?num=46976
Вот здорово, свежий гит выходит - и я уверен что никаких проблем с обновлением не будет.
> ...и я уверен что никаких проблем с обновлением не будет.это ты сходил на тренинг повышения чувства уверенности? :-D :-D
я тебе по секрету скажу -- с обновлениями проблем не бывает почти всегда -- это штатная процедура.
в независимости от твоей уверенности.
особенно если читать release notes перед обновлением
> В "git reset" добавлена опция "--recurse-submodules" для рекурсивного обхода субмодулей;Бомба.
> По аналогии с "git grep" в "git log" добавлена опция "-P" как синоним "--perl-regexp";
Отлично. Теперь ждём, когда обёртки подхватят. Было бы очень здорово отфильтровать в логе инфу сразу по нескольким багам.
>> По аналогии с "git grep" в "git log" добавлена опция "-P" как синоним "--perl-regexp";
> Отлично. Теперь ждём, когда обёртки подхватят. Было бы очень здорово отфильтровать в логе инфу сразу по нескольким багам.Так это же уже раньше было, просто в виде "--perl-regexp", сейчас просто добавили сокращенный флаг "-P". Если обёртки хотели, они уже могли и раньше это использовать.
> Так это же уже раньше было, просто в виде "--perl-regexp", сейчас просто
> добавили сокращенный флаг "-P". Если обёртки хотели, они уже могли и
> раньше это использовать.Увы, не везде ещё. Юзаю последний стабильный релиз (март 2017) magit 2.10.3, --perl-regexp ещё не завезли. Впрочем, есть интеграция с git log --grep, но я как-то не сообразил, как мне там "или" проставить: шаблоны типа "bug-1|bug-2" или "bug-(1|2)" не работают, увы.
Но тем не менее радует внимание апстрима к этой фиче. Вообще, чем дожидаться её интеграции в обёртки, возможно, имеет смысл просто взять и написать. Но время, время... )
UPD: Ваше сообщение сподвигло меня на ещё одну проверку magit. Оказывается, шаблон "bug-1\|bug-2" работает. В прошлый раз у меня как-то не возникло мысли о необходимости экранирования этого символа. Короче, спасибо!
> Оказывается, шаблон "bug-1\|bug-2" работает. В прошлый раз у меня как-то не возникло мысли
> о необходимости экранирования этого символа. Короче, спасибо!Его и в grep(1), и в sed(1) надо экранировать, чтоб работало как ты хотел.
Просто в grep(1) можно использовать '-E', а в sed(1) - '-r', чтоб не экранировать, но это уже так - "расширения"...
> Просто в grep(1) можно использовать '-E', чтоб не экранировать, но это уже так - "расширения"...Во. Сколько нового узнаёшь порой из комментариев на OpenNet. )
А я-то всегда, когда нужен был пайп, использовал egrep. Теперь внимательнее почитал man по части ERE. Спасибо. Буду знать.
> Увы, не везде ещё. Юзаю последний стабильный релиз (март 2017) magit 2.10.3, --perl-regexp ещё не завезли.тоже мне новость! любители IDE (в данном случае Emacs в качестве IDE) как обычно страдают от устаревших версий поведений своих IDE-компонентов!
всегда так было, и всега IDE-шники ели свой кактус, производя попутно низкокачественный прогаммный код.
Толсто. :/Во-первых, тот же Magit в "Emacs как IDE" имеет ряд фишек, которых нет в git cli. Например, в консольной версии git нет возможности оперировать кусками (hunk-ами). То бишь в magit ты можешь выбрать конкретный ханк конкретного коммита и ревертнуть только его. В консоли же -- либо весь коммит, либо руками ворочай.
Во-вторых, задача IDE -- мелкая помощь в работе: подсветка синтаксиса и парных конструкций (типа скобок, if-ов и т.п.), автодополнение имён переменных, автоматическая расстановка отступов, подсветка ошибок на лету. Качество кода и скорость его написания от этого только выигрывают. Странно винить IDE в том, в чём по сути надо винить криворукую макаку, возомнившую себя программистом.
> Во-первых, тот же Magit в "Emacs как IDE" имеет ряд фишек, которых
> нет в git cli. Например, в консольной версии git нет возможности
> оперировать кусками (hunk-ами). То бишь в magit ты можешь выбрать конкретный
> ханк конкретного коммита и ревертнуть только его. В консоли же --
> либо весь коммит, либо руками ворочай.Что-то вроде такого?
git revert --no-commit HEAD
git reset
git checkout -p
git add ...
git commit -m ...Или в Magit какая-то магия используется?:)
> Что-то вроде такого?
> git revert --no-commit HEAD
> git reset
> git checkout -p
> git add ...
> git commit -m ...
> Или в Magit какая-то магия используется?:)Почти, только тут управление всё равно на уровне файла, а в magit, например, если у тебя в файле три изменения (ну допустим в 1й строчке, 100й и 200й), то ты можешь выбрать конкретный кусочек патча (ханк вокруг 100й строчки) и нажатием клавиши v его ревертнуть.
>[оверквотинг удален]
>> git revert --no-commit HEAD
>> git reset
>> git checkout -p
>> git add ...
>> git commit -m ...
>> Или в Magit какая-то магия используется?:)
> Почти, только тут управление всё равно на уровне файла, а в magit,
> например, если у тебя в файле три изменения (ну допустим в
> 1й строчке, 100й и 200й), то ты можешь выбрать конкретный кусочек
> патча (ханк вокруг 100й строчки) и нажатием клавиши v его ревертнуть.Так и здесь по "ханкам": "git checkout -p" как раз это и делает.
> Так и здесь по "ханкам": "git checkout -p" как раз это и делает.Посмотрел. Здорово, не знал, что в консольном git есть такое. Да, пожалуй, это почти оно.
Единственное что, всё-таки тут надо сначала ревертнуть целиком коммит, ресетнуть его, а потом выкинуть все ханки коммита, кроме того, который надо оставить... В magit же просто переходишь в описание коммита в логе, выбираешь конкретный ханк, и его обращаешь.
Да что там. Вот гляньте лучше скринкаст:
http://exchange.freehck.ru/share/magit-hunk-screencast.ogv
>> Так и здесь по "ханкам": "git checkout -p" как раз это и делает.
> Посмотрел. Здорово, не знал, что в консольном git есть такое. Да, пожалуй,
> это почти оно.https://www.kernel.org/pub/software/scm/git/docs/git-rebase....
+оттуда ссылка на
https://www.kernel.org/pub/software/scm/git/docs/git-add.htm...
, поминающий слово "split" в команде patch...не то, чтобы это хоть зачем-нибудь кому-то надо было...
> Единственное что, всё-таки тут надо сначала ревертнуть целиком коммит, ресетнуть его, а
Как это страшно!
> http://exchange.freehck.ru/share/magit-hunk-screencast.ogvКстати, учиться pip-у и js-у настоящим https://asciinema.org/browse образом.
>Например, в консольной версии git нет возможности оперировать кусками (hunk-ами).Что за "консольная версия git"?
Какой-то фронтенд для гита?В гите есть возможность оперировать кусками (hunk-ами)
Например
git help add
...
-p, --patch
Interactively choose hunks of patch between the index and the work
tree and add them to the index. This gives the user a chance to
review the difference before adding modified contents to the index.
...или
git help checkout
...
-p, --patch
Interactively select hunks ...