華為云大咖說-如何利用Git提升研發效率?
十年來研發工具鏈的變化
傳統的研發管理平臺,是工具的松散的整合——>現在是各個系統深度整合。
以前研發工具鏈的核心是缺陷跟蹤、需求管理工具——> 如今Github這類代碼檢視工具成為核心,
這種變化與團隊的組織架構變化有關, 十年前,角色定位清晰,界限分明,比如:開發、測試、運維、產品管理、用戶。但現在,技術的進步使這種界限逐漸模糊,比如:敏捷、CI構建、測試驅動開發使開發和測試的界限模糊;比如:DevOps讓開發和運維的界限模糊;用戶的身份也發生了變化,源碼開放,讓用戶從需求的提出方成為解決方案的參與方。
在這種變化中,Git逐漸成為了主流。
為什么是Git?
更加自由
*??人人皆可使用,人人皆可貢獻。(對開源項目的推廣尤為重要)
*??任何時間、任何地點都可貢獻。(開源貢獻、移動辦公、云服務)
更加安全
*??分布式、多副本,降低存儲介質損壞的風險。
*??數據不可篡改,防黑客攻擊。入侵服務器,無法更改倉庫。
質量更高
*??代碼檢視前置,在代碼合入之前。
*??歷史提交可修改,精益求精的質量文化。
Git譜系圖
Git 是2005年 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。Git真正被世人了解和接受是在2008年Github的推出后。此后發生了基于Git的配置管理工具大爆發。2008年還有另外一個工具是Gerrit,它是谷歌開源的為安卓而生的Git工具。
如何做好代碼檢視
檢視應該是對提交過程逐個提交的review,而不是對最終結果的review。
一個提交的修改量要少,以防說不清提交說明。
要寫提交說明,提交說明出錯的話要修改。
提交說明中需要包含測試用例。
修改提交的常用Git語句及修正歷史提交示例如下圖:
如何掌握Git?
學習方法:以Git數據結構、文件系統為線索,Git命令都是在操作他們。
四類Git對象
* 問題:沒有提交的文件能夠找回么?
——git add后的可能能找回(使用git fsck和dangling objects)
分支、reflog
*??問題:分支多了,是不是倉庫空間占用變多了?
—— 一個指針而已,不會占用很多空間。
*??問題:誤用了git reset等操作破壞了當前分支,如何修復?
——從log中找到之前的恢復。
*??問題:為什么倉庫做了裁剪,執行git gc,不見倉庫變小?
——reflog中的歷史提交沒有丟棄。
DAG與三路合并
*??問題:為什么提交回退(revert)、臟合并,導致合并中提交丟失?
切莫采用SVN一樣的工作流
抱怨:SVN提交只需要一個commit命令就夠了,Git為什么要兩個命令(git commit和git push)?
提出這個抱怨的用戶一定是有兩個地方做錯了。一是把Git的工作流做錯了,不應該用共享倉庫式的工作流。另一種是不應該一次commit提交一次,而應該是多次commit一個特性提交一次。
抱怨:我的提交被別人的強制推送(push--force)覆蓋了。
出現這個問題就是因為采用了共享倉庫式的開發。使用這種方式的A和B可能會發生的問題如下圖所示。如果使用共享倉庫式,建議采用第三個方式。
包含代碼檢視的工作流
新的集中式工作流
華為內部采取的一種新的集中式工作流:
新的集中式工作流示例:
實踐中可能遇到的問題
選擇合適的工作流
*??提交說明規范。
*??工作流規范。
*??編譯構建流程。
精細代碼授權
*??代碼私密性,Git不支持路徑授權,而是更大粒度的倉庫授權。
*??所以,授權是倉庫分倉的原因之一。
大倉庫管理
*??歷史文件清理:git filter-branch。
*??二進制文件管理:Git-LFS。
*??分而治之:分倉。
多倉庫管理
*??子倉庫過多(10個以上?)不要使用submodule。此時推薦使用Android風格的多倉庫管理,由華為開發,叫做Git-MM。
提問和解答
在非開源項目里,我不希望程序員或者產品經理之類的角色能拿到所有代碼,要注意什么?
答:將敏感的部分包括相關提交拿出來變成一個新的倉庫,這個工具叫Git fit branch,具體可以查看電子版《Git權威指南》,見www.worldhello.net
SVN的歷史轉到Git能否保留?
答:可以保留,使用Git svn這個工具可以實現歷史保留。
如何更有效的解決沖突?
答:最好就是進行好的模塊化設計,不要產生沖突。如果不可避免的發生了沖突,win上有很多代碼合并工具。
Git cherry-pick的原理是什么?
答:可以理解為將需要揀選的提交做成一個patch,再重新打到需要揀選的新的分支上去。感興趣的話可以去看一下源碼。
如何說服boss從SVN轉到Git?
答:有很多策略,如:友商都用Git,用Git可以做代碼review讓代碼質量更高,開源社區都在用Git,SVN的維護成本高、安全風險大。
視頻鏈接:https://m.qlchat.com/wechat/page/topic-intro?topicId=840000204169950
以上文字內容由【內容眾創興趣小組-孔皮皮】整理。
軟件開發云
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。