![]()
GitHub近日發(fā)布了堆疊PR(Stacked PRs)功能,該功能目前處于私有預(yù)覽階段,旨在幫助開發(fā)者更輕松地管理大型拉取請(qǐng)求,并加快整個(gè)代碼審查流程。
堆疊PR允許一個(gè)拉取請(qǐng)求基于前一個(gè)拉取請(qǐng)求構(gòu)建,從而形成一條"堆疊鏈"。鏈中的每個(gè)拉取請(qǐng)求都可以獨(dú)立進(jìn)行審查和合并,但前提是其下方的所有拉取請(qǐng)求均已完成合并。此外,用戶也可以選擇將整個(gè)堆疊一次性合并。
堆疊PR的核心優(yōu)勢(shì)在于鼓勵(lì)開發(fā)者提交更小粒度的拉取請(qǐng)求,從而降低審查難度。官方文檔指出:"堆疊中的每個(gè)分支應(yīng)代表一個(gè)獨(dú)立的、符合邏輯的工作單元,可以被單獨(dú)審查。"
然而在實(shí)際開發(fā)中,這一目標(biāo)往往難以實(shí)現(xiàn)。開發(fā)者通常希望在等待前序代碼合并期間持續(xù)推進(jìn)工作,而不愿因等待審查而中斷進(jìn)度。為此,他們往往會(huì)在獨(dú)立分支上持續(xù)開發(fā)直至功能完整,最終提交一個(gè)涉及大量文件變更的巨型拉取請(qǐng)求,給審查工作帶來極大負(fù)擔(dān)。
堆疊PR功能雖然對(duì)GitHub而言是全新能力,但在其他代碼管理與審查系統(tǒng)中早有類似實(shí)踐,通常被稱為"堆疊差異(Stacked Diffs)"。其中最具代表性的是由Facebook的Evan Priestley和Luke Shepard于2007年開發(fā)的Differential工具。Priestley曾表示:"我花了大量時(shí)間等待代碼審查,這正是我構(gòu)建這個(gè)工具的主要?jiǎng)恿Α?Differential后來成為Facebook內(nèi)部工具套件Phabricator的核心組件,并于2011年以開源形式對(duì)外發(fā)布。開源版Phabricator已于2021年停止更新,但其分支項(xiàng)目Phorge目前仍在積極維護(hù)中。
在使用堆疊PR時(shí),開發(fā)者的工作流程與傳統(tǒng)方式存在顯著差異。堆疊最底層的PR通常直接基于主分支創(chuàng)建,而非獨(dú)立分支。曾在Facebook擔(dān)任工程師的Jackson Gabbard(2006年至2016年)在一篇詳細(xì)說明文章中寫道:"使用過Phabricator堆疊差異工作流的開發(fā)者普遍非常喜愛這種方式,并且在去到新的地方后也會(huì)主動(dòng)尋找類似的工具。"
在Hacker News上,社區(qū)對(duì)這一功能的討論總體持積極態(tài)度。不過也有開發(fā)者指出:"我不太明白為什么需要這個(gè)命令行工具(CLI),Git本身近幾年的更新已經(jīng)可以原生支持這種工作流。"此處提及的CLI正是GitHub專屬擴(kuò)展工具gh stack。盡管如此,將該功能整合進(jìn)GitHub仍是一項(xiàng)重大改進(jìn),而CLI的存在也大幅簡化了使用門檻。負(fù)責(zé)該功能開發(fā)的GitHub工程師Sameen Karim表示:"CLI完全是可選的,你完全可以通過圖形界面創(chuàng)建堆疊PR。"
在AI層面,GitHub同樣有所布局。Karim在LinkedIn上表示:"瓶頸已不再是寫代碼,而是審查代碼。堆疊PR有助于解決這一問題。"他還透露,堆疊CLI同樣面向AI智能體使用場(chǎng)景進(jìn)行了專項(xiàng)設(shè)計(jì)。
Q&A
Q1:堆疊PR(Stacked PRs)是什么?它解決了什么問題?
A:堆疊PR是GitHub新推出的功能,允許多個(gè)拉取請(qǐng)求以堆疊形式相互依賴,每個(gè)PR可獨(dú)立審查和合并。它主要解決了開發(fā)者在等待代碼審查時(shí)無法持續(xù)推進(jìn)工作的問題,避免了因功能未拆分而提交龐大、難以審查的拉取請(qǐng)求的情況,從而提升代碼審查效率。
Q2:堆疊PR和Phabricator的堆疊差異功能有什么關(guān)系?
A:堆疊PR的概念源于Phabricator的"堆疊差異(Stacked Diffs)"工作流。Phabricator是Facebook于2011年開源的內(nèi)部工具套件,其核心組件Differential由Evan Priestley和Luke Shepard于2007年開發(fā),專門用于解決代碼審查效率問題。許多熟悉這一工作流的開發(fā)者對(duì)其評(píng)價(jià)極高,GitHub此次將類似功能整合進(jìn)平臺(tái),是對(duì)這一成熟工作流的傳承與發(fā)展。
Q3:使用堆疊PR必須用命令行工具(CLI)嗎?
A:不是必須的。GitHub提供了專屬CLI擴(kuò)展工具gh stack來輔助管理堆疊PR,但負(fù)責(zé)該功能開發(fā)的工程師Sameen Karim明確表示,CLI完全是可選項(xiàng),用戶可以直接通過GitHub的圖形界面來創(chuàng)建和管理堆疊PR,無需使用命令行工具。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.