ඔබගේ Git repository එකේ git status "Your branch is ahead of 'origin/main' by 14 commits" කියලා පණිවුඩයක් දැක්කාම, ඒක සැබෑවක් වගේ හිතෙන්න පුළුවන්. නමුත් නවතම CI pipeline එකක් තුළ මේ පණිවුඩය වැරදි බව පෙනී ගියා.
මෙම pipeline එක Docker container එකක ධාවනය වෙයි. කාලයකින් කාලයට HEAD එක main branch එකෙන් වෙන්වී (detached HEAD) ඉඳලා, ස්ක්රිප්ට් එකක් ඒක main branch එකට fast‑forward කරයි. එම ස්ක්රිප්ට් පසු ගිය විට git status දැක්වූයේ "ahead by 14 commits" යනුවයි. නමුත් git push කළාම "Everything up‑to‑date" කියලා පෙනේ. ඒ කියන්නේ, remote‑ එකේ commit ගණනට කිසිදු වෙනසක් නැති බවයි.
Git මෙහිදී remote‑ එකේ origin/main branch එකේ වර්තමාන SHA පරීක්ෂා නොකරයි. එයට වඩා, .git ෆෝල්ඩරයේ refs/remotes/origin/main නමින් සුරැකුම් කර ඇති cache එකට බලයි. මේ cache එක අවසන් වරට fetch, pull හෝ push කිරීමෙන් යාවත්කාලීන වුණාම පමණක් නවතම තොරතුරු දරයි. එය පැරණි cache එකක් නම්, "ahead by N" කියන පණිවුඩය ඇත්තේ cache එකේ පසුගිය තත්ත්වය පමණයි, remote‑ එකේ වර්තමාන තත්ත්වය නොවේ.
ඉතින්, git reflog එකෙන් පෙන්වන ලද ඉතිහාසය අනුව, container එකේ shallow clone (depth 50) කරන අවස්ථාවේ origin/main හි SHA එක cea2f71 විය. එතැන් පසු detached HEAD එක f22ddcf නම් commit එකට පැන ගියේ, එය remote‑ එකේ 14 commit ඉදිරියට තිබුණි. නමුත් local tracking ref එක එම වෙනස නොදැන සිටියා.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලාංකීය සංවර්ධකයින්, විශ්වවිද්යාල සිසුන්, තාක්ෂණික ව්යාපාරිකයන් සඳහා මේ සිද්ධියට ඉතා වැදගත් තේරුම් ඇත. CI/CD pipeline එකක වැරදි "ahead" පණිවුඩයක් නිසා අතිරේක push හෝ merge ක්රියාමාර්ග ගන්නා ලදහොත්, අමතර bandwidth, cloud storage, සහ කාලය වියදම් විය හැකිය. Cache‑ එකේ තත්ත්වය සත්ය පරීක්ෂාවක් ලෙස භාවිතා නොකළහොත්, දෝෂ සහිත release එකක් නිකුත් වීමේ අවදානමද ඇතිවේ.
Git හි tracking ref එක cache එකක් බව තේරුම් ගත් පසු, සංවර්ධකයින්ට git fetch --prune හෝ CI job එකේ git remote update වැනි නවීන කිරීමේ පියවර එකතු කිරීමෙන් මෙම ගැටළුව වැළැක්විය හැකිය. එමඟින් ශ්රී ලංකාවේ තාක්ෂණික සමාජය වැඩි දක්ෂතාවයක්, අඩු වියදමක්, සහ වේගවත් නිෂ්පාදන චක්රයක් අත්විඳින්නට හැකි වේ.
අවසන් වශයෙන්, Git status පණිවුඩය සලකා බැලීමේදී එය cache‑ එකේ දත්තද, remote‑ එකේ දත්තද යන්න වෙනස් කරගෙන, නිවැරදි තීරණයක් ගැනීමට අවශ්ය වේ.