Git 2.39 эх сурвалжийн хяналтын хувилбар

Хоёр сарын хөгжүүлэлтийн дараа Git 2.39 түгээх эх сурвалжийн хяналтын систем гарсан. Git бол салбаруудыг салбарлах, нэгтгэх зэрэгт суурилсан уян хатан шугаман бус хөгжүүлэлтийн хэрэгслээр хангадаг хамгийн алдартай, найдвартай, өндөр гүйцэтгэлтэй хувилбарын хяналтын системүүдийн нэг юм. Түүхийн бүрэн бүтэн байдал, буцаан өөрчлөлтөд тэсвэртэй байхын тулд амлалт бүрт өмнөх түүхийг бүхэлд нь далд хэшлэх аргыг ашигладаг бөгөөд хөгжүүлэгчдийн тоон гарын үсгээр хувь хүний ​​шошго, амлалтуудыг баталгаажуулах боломжтой.

Өмнөх хувилбартай харьцуулахад шинэ хувилбарт 483 өөрчлөлт орж, 86 хөгжүүлэгчийн оролцоотойгоор бэлтгэгдсэн бөгөөд үүнээс 31 нь анх удаа хөгжүүлэлтэд оролцсон байна. Гол шинэчлэлүүд:

  • "git shortlog" команд дээр --group сонголтыг нэмсэн бөгөөд энэ нь өөрчлөлтийн түүхийн статистикийн хамт хураангуйг харуулах, зөвхөн зохиогч эсвэл захиалагчаар хязгаарлагдахгүй талбараар үйлдлийг дур мэдэн бүлэглэх зориулалттай. Жишээлбэл, "Хамтран бичсэн" талбарт дурдсан туслагчдыг харгалзан өөрчлөлтийн тооны талаарх мэдээлэл бүхий хөгжүүлэгчдийн жагсаалтыг харуулахын тулд та дараах тушаалыг ашиглаж болно: git shortlog -ns --group=author - -бүлэг=трейлер:хамтран зохиогч

    Богино бүртгэлийн гаралтыг формат тодорхойлогч ашиглан нэгтгэж болох ба "--group" сонголт нь нарийн төвөгтэй тайланг үүсгэхийг ихээхэн хялбарчилж, нэмэлт эрэмбэлэх командуудаас ангижрах боломжтой. Жишээлбэл, өгөгдсөн хувилбарын хувьд сар бүр хэдэн амлалт хийгдсэнийг харуулсан тайлан гаргахын тулд та дараахийг ашиглаж болно: git shortlog v2.38.0.. --date='format:%Y-%m' --group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Өмнө нь ижил төстэй үйлдлийг гүйцэтгэхийн тулд sort болон uniq шаардлагатай байсан: git log v2.38.0.. --date ='format:%Y -%m' --format='%cd' | ангилах | uniq -c

  • Хадгалах газарт лавлагаагүй (салбар эсвэл шошгонд хамаарахгүй) хүрэх боломжгүй объектуудыг багцлахад зориулагдсан "cruft packs" механизмын чадавхийг өргөжүүлсэн. Хүрэх боломжгүй объектуудыг хог цуглуулагч устгадаг боловч уралдааны нөхцөл байдлаас зайлсхийхийн тулд зайлуулахын өмнө тодорхой хугацаанд хадгалах газарт үлддэг. "Cruft packs" механизм нь танд хүрч болохгүй бүх объектыг нэг багц файлд хадгалах боломжийг олгодог бөгөөд объект бүрийн өөрчлөлтийн хугацааны өгөгдлийг тус тусад нь ".mtimes" өргөтгөлтэй файлд хадгалсан тусдаа хүснэгтэд тусгах боломжийг олгодог. нийт өөрчлөлтийн хугацаатай давхцаж байна.

    Холбогдох боломжгүй объектуудыг устгахаас өмнө репозиторт байх хугацааг "--prune=" сонголтоор тодорхойлно. ". Хэдийгээр устгахаас өмнө хойшлуулах нь уралдааны нөхцөл байдлаас шалтгаалан хадгалах санг эвдрэхээс урьдчилан сэргийлэх үр дүнтэй, практик арга боловч 100% найдвартай биш юм. Эвдэрсэн репозиторыг сэргээхэд хялбар болгохын тулд шинэ хувилбар нь "git repack" команд дээр "--expire-to" сонголтыг нэмснээр дутуу объектуудыг хадгалах боломжийг олгодог бөгөөд энэ нь гадны файл үүсгэх файлыг зааж өгөх боломжийг олгодог. бүх устгасан объектын хуулбар. Жишээлбэл, backup.git файлд сүүлийн 5 минутын дотор өөрчлөгдөөгүй, хүрч болохгүй объектуудыг хадгалахын тулд та дараах тушаалыг ашиглаж болно: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Хэсэгчилсэн клон (сийрэг шалгах) ашигладаг, хэсэгчилсэн индекс (сийрэг индекс) байдаг газруудад хайлт хийх үед "git grep --cached" үйлдлийн хурдыг мэдэгдэхүйц нэмэгдүүлсэн (70% хүртэл). Өмнө нь "--cached" сонголтыг зааж өгөхдөө эхлээд ердийн индексийг хайж, дараа нь хэсэгчилсэн индексийг хайж байсан бөгөөд энэ нь том агуулахаас хайхад мэдэгдэхүйц саатал гарахад хүргэсэн.
  • "Git push" үйлдлийг гүйцэтгэх үед шинэ объектуудыг репозиторт байрлуулахаас өмнө тэдгээрийн холболтыг шалгахын тулд сервер дээр хурдан гүйцэтгэх. Зөвхөн зарласан холбоосыг шалгахдаа 7 сая холбоос бүхий туршилтын санд шилжсэнээс зөвхөн 3% нь түлхэх үйлдэлд хамрагдсан тул оновчлолын дагуу шалгах хугацааг 4.5 дахин багасгах боломжтой болсон.
  • Кодын боломжит бүхэл тоо хэтрэхээс хамгаалахын тулд "git application" команд нь боловсруулж болох засваруудын дээд хэмжээг хязгаарладаг. Хэрэв засварын хэмжээ 1 ГБ-аас хэтэрвэл алдаа гарч ирнэ.
  • Болзошгүй эмзэг байдлаас хамгаалахын тулд h2h3 модулийг HTTP/1-ийн хамт GIT_TRACE_CURL=1 эсвэл GIT_CURL_VERBOSE=2 сонголтоор ашиглах үед тохируулсан толгойн мэдээллээс шаардлагагүй мэдээллийг цэвэрлэх өөрчлөлтийг хийсэн.
  • Өөр салбартай симболын холбоос болох салбар дээр шалгах үйлдлийг гүйцэтгэх үед "git symbolic-ref HEAD" команд нь симбол холбоосын нэрийг биш зорилтот салбарын нэрийг хэвлэнэ.
  • Өнгөрсөн салбаруудын тайлбарыг засахын тулд "--edit-description" ("git branch --edit-description @{-1}") сонголтод @{-1} аргументыг дэмжсэн.
  • Параметрийн жагсаалтыг стандарт оролтоор дамжуулахын тулд "git merge-tree --stdin" командыг нэмсэн.
  • Сүлжээний файлын системд файлын системийн өөрчлөлтийг хянадаг fsmonitor зохицуулагч нь анхдагчаар идэвхгүй байдаг.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх