Git能助你做出步子更大的重構

2021-06-20 15:50:29 字數 1666 閱讀 7607

許多國外重構大師,如kent beck和martin folwer都建議我們:重構的步子要盡量小,每兩次測試變綠的時間間隔要盡量短。若**耦合過密,兩次測試變綠的時間間隔很難變短,而需要很長時間時該怎麼辦?

首先解釋一下什麼是重構的步子(step)。乙個重構的步子,就是在同乙個測試的兩次變綠(執行通過)之間所做出的**改動。

下面是兩位程式設計師之間的對話。

b:「現在**中clock下面有紅線,表示這個類還沒有定義,不過我覺得咱們現在就可以提交**到git。」

r:「啊?**編譯還未通過,就提交**?我們公司可是要求我們直到測試執行通過才能提交**的。」

b:「對,你們公司說得沒錯,不過我認為這個要求是針對某種特殊情況而言的,即版本控制系統的**庫是使用『客戶端-伺服器』這種集中式的管理的情況。你們公司管理**版本用的是什麼工具?」

r:「svn。」

b:「嗯,svn用的就是這種集中式管理的方式來管理**版本。早先的**管理工具cvs也用的是這種方式。這種方式最明顯的特點就是一旦斷網就無法提交**。」

r:「是呀,用svn管理**必須聯網。我在家辦公的時候,要是連不上公司網路,那就沒法寫**了。」

b:「而用分布式的**版本管理工具git就沒這個問題。git除了也有遠端**庫外,在客戶端也有客戶端**庫,網斷了一樣也可以管理本地**版本。程式設計師不必等到本地編譯或測試通過,而可以隨時把**提交到本地**庫。直到本地的**編譯和測試都通過後,再統一把**push到遠端**庫中,照樣不會破壞遠端的持續整合。」

**版本控制系統根據**庫的管理方式分為兩種:一種是「客戶端-伺服器」的集中式管理方式,即「乙個中心**庫,多個客戶端」,如svn、clearcase和cvs。其特點是客戶端沒有管理**版本的能力,一旦斷開網路,就無法進行**版本的管理。另一種是分布式管理方式,即「乙個中心**庫,多個客戶端**庫」,如git和bitkeeper。其特點是客戶端**庫有管理**版本的能力,斷網也能管理**版本。

「**只有編譯和測試通過才能提交」這一點,主要是針對集中式的**版本控制系統而言的,以保證不會破壞遠端的持續整合的編譯、測試和打包。但如果程式設計師正在做乙個步子較大的重構,比如需要修改30行**,當修改了20行**時,發現寫錯了,需要回退到修改了10行**時狀態,若使用集中式**版本控制系統,**的狀態只有在提交時才記錄,那麼要回退的話,也只能回退到上次測試變綠即修改了0行**時的狀態,這樣那10行**的修改就找不回來了。

但對於分布式的**版本控制系統,只要不push到遠端的**庫,程式設計師無論**是否通過了編譯和測試,甚至每修改一行**,都可以隨時提交到本地**庫,這樣就可以輕鬆地在**寫錯時回退到上面修改了10行**的狀態。當程式設計師在自己電腦上的本地**庫中,最終讓編譯和測試執行通過,並從遠端**庫fetch回**與自己的**進行了比較,確保沒有衝突後,就可以一次性地把自己電腦上所有本地**庫中提交的**,push到遠端**庫上,這樣同樣能夠保證不會破壞遠端持續整合系統的編譯打包工作。

既然git能從機制上保證程式設計師只要不push**到遠端,就可以不管**是否編譯和測試通過,而頻繁地commit**,那就意味著在一步重構之內,即兩次測試變綠之間,**是可以頻繁commit到本地**庫,而不用擔心破壞遠端的編譯測試打包工作的。而中間頻繁的commit,就可以幫助程式設計師輕鬆回退到寫錯前的**,進而在一步重構之內寫更多的**,從而支援更大步伐的重構。

Git能助你做出步子更大的重構

許多國外重構大師,如kent beck和martin folwer都建議我們 重構的步子要盡量小,每兩次測試變綠的時間間隔要盡量短。若 耦合過密,兩次測試變綠的時間間隔很難變短,而需要很長時間時該怎麼辦?首先解釋一下什麼是重構的步子 step 乙個重構的步子,就是在同乙個測試的兩次變綠 執行通過 之...

永凱高階生產排程軟體助你做出精準的決策

你想更好地安排生產。您認為生產排程軟體可以幫助。但在今天的預算緊張的環境,你如何將排程軟體的建議遞交到管理決策層?在最低限度,購買生產排程軟體的公司都需要自己支付,也都期望排程軟體能帶來顯著的回報。這種自動化的排程軟體能帶來所需的回報嗎?是嘗試一下然後再選擇其它的?還是嘗試並利用高階的生產排程軟體的...

零碎時間 也能助你成功

小額投資足以致富是個淺顯的道理,然而,很少有人注意,零碎時間的掌握卻足以叫人成功。在人人喊忙的現代社會裡,乙個愈忙的人,時間被分割得愈厲害,無形中時間也相對流失更迅速,諸如等車 候機 對方約會遲到 旅程 塞車 這些情況都必須 等 而 等 本身就是一種焦慮源,為了舒緩這種緊張,通常我們被建議 暗示 放...