издаване на разпределена система за управление на изходните текстове . Git е една от най-популярните, надеждни и високопроизводителни системи за управление на версии, предоставяща гъвкави средства за нелинейна разработка, базирани на разклоняване и сливания на клонове. За да се осигури целостта на историята и устойчивостта на промени „заден план“ се използва неявно хеширане на цялата предишна история във всеки комит, също така е възможно удостоверяването с цифрови подписи на разработчиците на отделни тагове и комити.
Сравнено с предишната версия, новата версия включва 583 промени, подготвени с участието на 84 разработчици, от които 32 участват за пръв път. :
- Приближава се до стабилизация и пълна готовност възможността за частично клониране (partial clones), позволяваща пренасяне само на част от данните и работа с непълна копия на репозиторий. При обичайно клониране от репозитория се копират всички данни, включително всяка версия на всеки файл от историята на промените. За много големи репозитории копирането на данните води до значително увеличаване на трафика и дисковото пространство, дори и когато разработчикът се интересува само от подмножество на файловете. За опростяване на получаването само на част от работното дърво на изходните текстове, в новото издание е предложена експериментална команда "sparse-checkout" и нова опция "--sparse" за командата "clone."
По-рано процесът на изборно клониране се е извършвал чрез задаване за отсяване на излишното съдържание и опция "--no-checkout" за деактивиране на попълване на липсващите файлове. След това, преди да се изпълни операцията checkout, е трябвало да се активира настройката core.sparseCheckout и да се определи в файла .git/info/sparse-checkout списъкът на шаблони за изключване на пътища. Например, за клониране без блобове и забрана за извличане на файлове от вложени каталози на дълбочина 2 и повече, можеше да се изпълни:
git clone --filter=blob:none --no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .Новата команда "git sparse-checkout" значително опростява работата и свежда процеса на организиране на работа с непълен репозиторий до команди:
git clone --filter=blob:none --sparse /your/repository/here repo
git sparse-checkout set /path/to/check/outКомандата sparse-checkout позволява да се зададе списък от пътища за checkout (set) без ръчна настройка на .git/info/sparse-checkout, както и да се извлече текущият списък на пътища (list) и да се включи или изключи частичен checkout (enable/disable).
За оптимизиране на работата с много големи репозитории и списъци с шаблони е предложена настройка "«, ограничаваща допустимите шаблони (вместо произволни шаблони .gitignore можете да зададете всички пътища и файлове в зададената подкаталог, които следва да се извлекат). Например, ако в голямо хранилище има каталог «A/B/C» и цялата работа е съсредоточена в подкаталога «C», то при включване на режима sparseCheckoutCone командата «git sparse-checkout set A/B/C» ще извлече съдържанието на «C» изцяло, но от «A» и «B» ще извлече само необходимата за работа с «C» част.
- От документацията («git rebase -h») са премахнати всички споменавания на опцията «—preserve-merges», която е обявена за остаряла и вместо нея за прехвърляне на набор от комити следва да се използва ««.
- За подобряване на четимостта на съобщенията с пачове, изпратени в списъци за разпространение, е добавена опцията «git format-patch —cover-from-description subject», при задаване на която като тема на съпроводителното писмо за набора пачове се използва първият абзац от текста на описанието на клон.
- Реализирана е поддръжка за съвместно използване на командата «git apply —3way» и настройката «merge.conflictStyle» («git apply» сега взема предвид стила на описание на конфликта от merge.conflictStyle при необходимост от разрешаване на конфликта след опит за прилагане на файл с пач към хранилището).
- Кодът за определяне на функции, използван в такива операции като «git diff/grep —show-function/—function-context», е разширен с поддръжка за определяне на границите на функции в програми на езика .
- В «git add», «git commit», «git reset» и други команди е добавена нова опция «—pathspec-from-file», предоставяща възможност за зареждане на списък с пътища от файл или входен поток, вместо да бъдат изброявани в командния ред.
- Решен е проблемът с определянето на преименувания на ниво каталози при записване на комити. Определението не работеше в случай на преместване на съдържанието на подкаталог в корена на хранилището.
- Предложена е начална реализация на преработената команда «git add -i», позволяваща добавяне на променено съдържание в интерактивен режим, пренаписана от Perl на C. Води се аналогична преработка на командата «git add -p».
- Извършен е рефакторинг на командата «git log —graph», формираща ASCII изображение на графа с история на промените в хранилището. Преработката позволи значително подобрение и опростяване на изхода без изкривяване на структурата на историята, което, например, реши проблема с излизането на изображението извън ширината на реда в терминала.
- Опцията «git log —format=..», позволяваща да промените формата на изхода,
е разширена с поддръжка на флаговете «l/L» за извеждане само на частта от имейл адреса, указана преди символа «@» (например, полезно, когато всички разработчици имат имейл адреси в един и същ домейн). - Към командата «git submodule» е добавена подкоманда «set-url».
- Тестовите набори са обновени в рамките на подготовката за прехвърляне на
алгоритъм за хеширане SHA-2 вместо SHA-1.
Източник: opennet.ru
