Git 2.37 स्रोत नियन्त्रण रिलीज

वितरित स्रोत नियन्त्रण प्रणाली Git 2.37 को रिलीज घोषणा गरिएको छ। Git सबैभन्दा लोकप्रिय, भरपर्दो र उच्च प्रदर्शन संस्करण नियन्त्रण प्रणाली मध्ये एक हो, जसले शाखा र मर्जमा आधारित लचिलो गैर-रैखिक विकास उपकरणहरू प्रदान गर्दछ। इतिहासको अखण्डता र पूर्वव्यापी परिवर्तनहरूको प्रतिरोध सुनिश्चित गर्न, सम्पूर्ण अघिल्लो इतिहासको निहित ह्यासिङ प्रत्येक कमिटमा प्रयोग गरिन्छ; विकासकर्ताहरूको डिजिटल हस्ताक्षरको साथ व्यक्तिगत ट्यागहरू र प्रतिबद्धताहरू प्रमाणित गर्न पनि सम्भव छ।

अघिल्लो रिलीजको तुलनामा, 395 परिवर्तनहरू नयाँ संस्करणमा अपनाइयो, 75 विकासकर्ताहरूको सहभागितामा तयार पारिएको थियो, जसमध्ये 20 ले पहिलो पटक विकासमा भाग लिए। मुख्य आविष्कारहरू:

  • Доведён до готовности к повсеместному использованию механизм частичных индексов (sparse index), охватывающих лишь часть репозитория. Частичные индексы позволяют повысить производительность и сэкономить место в репозиториях, в которых выполняются операции частичного клонирования (sparse-checkout) или осуществляется работа с неполной копией репозитория. В новом выпуске завершена работа по интеграции частичных индексов в команды «git show», «git sparse-checkout» и «git stash». Наиболее заметный выигрыш в производительности от использования частичных индексов наблюдается в команде «git stash», скорость выполнения которой в некоторых ситуациях возросла на 80%.
  • Реализован новый механизм «cruft packs» для упаковки недостижимых объектов (unreachable), на которые в репозитории отсутствуют ссылки (не ссылаются ветки или теги). Недостижимые объекты удаляются сборщиком мусора, но до удаления определённое время остаются в репозитории для исключения состояний гонки. Для отслеживания периода нахождения недостижимых объектов необходима привязка к ним меток с временем изменения подобных объектов, что не позволяет хранить их в одном pack-файле, в котором все объекты имеют общее время изменения. Ранее применяемое сохранение каждого объекта в отдельном файле приводило к проблемам при наличии большого числа свежих недостижимых объектов, ещё не подпадающих под удаление. Предложенный механизм «cruft packs» позволяет хранить все недостижимые объекты в одном pack-файле, а данные о времени модификации каждого объекта отражать в отдельной таблице, хранимой в файле с расширением «.mtimes».
  • Для Windows и macOS реализован встроенный механизм отслеживания изменений в файловой системе, позволяющий обойтись без перебора всего рабочего каталога при выполнении таких операций, как «git status». Ранее для отслеживания изменений через hook-и могли подключаться внешние утилиты отслеживания изменений в ФС, такие как Watchman, но это требовало установки дополнительных программ и настройки. Теперь указанная функциональность встроена и может быть включена командой «git config core.fsmonitor true».
  • В команде «git sparse-checkout» объявлена устаревшей поддержка альтернативного режиму «—cone» метода определения шаблонов для частичного клонирования, позволяющего при определении подпадающей под операцию клонирования части репозитория перечислять отдельные файлы с использованием синтаксиса «.gitignore», что не позволяет использовать для оптимизации частичные индексы.
  • Повышена гибкость настройки вызова fsync() для сброса изменений на диск. В параметр «core.fsyncMethod» добавлена поддержка стратегии синхронизации «batch», позволяющей ускорить работу при записи большого числа отдельных файлов за счёт накопления изменений в кэше обратной записи, сбрасываемом одним вызовом fsync(). Проведённый тест, в результате которого в командой «git add» было добавлено 500 файлов, при включении нового режима был выполнен за 0.15 секунд, в то время как при вызове fsync() для каждого файла потребовалось 1.88 секунд, а без использования fsync — 0.06 секунд.
  • В команды обхода веток, подобные «git log» и «git rev-list», добавлена опция » —since-as-filter=X», позволяющая отсеять информацию о коммитах, время создания которых старше «X». В отличие от опции «—since» новая команда реализована в виде фильтра, не останавливающего перебор после первого коммита, старше заданного времени.
  • В команде «git remote» при указании флага «-v» обеспечен вывод информации о частичных клонах репозитория.
  • Добавлена настройка «transfer.credentialsInUrl», которая может принимать значения «warn», «die» и «allow». В случает указания в параметре «remote.<name>.url» учётных данных открытым текстом попытка выполнения операций «fetch» или «push» будет завершена ошибкой, если настройка «transfer.credentialsInUrl» принимает значение «die», или предупреждением, если установлено значение «warn».
  • По умолчанию задействована новая реализация интерактивного режима команды «git add -i», переписанная с Perl на Си.

स्रोत: opennet.ru

एक टिप्पणी थप्न