在過去的幾年中,版本控制(實際上已成為嵌入式軟件開發過程的一部分)已發生了很大變化。這對任何組織審查其版本控制策略并在版本控制工具上進行投資都具有重大意義。
最大的發展之一是Git的流行,Git是最初在Linux世界中開發的開源版本控制系統,但現在已被廣泛使用。Pure Git專為獨立工作和分布式本地化版本而設計,沒有中央服務器功能。Git的吸引力之所以可以理解是因為它為個人開發人員提供了一些引人注目的好處–價格便宜,設置迅速,并為個人或中小型團隊提供了所需的快速,靈活的版本控制和工作流程。
盡管許多傳統的嵌入式軟件開發人員可能并不歡迎Git,但大學畢業的新一代工程師是–以及諸如Agile之類的新開發方法。
Git確實有一些限制,但是可以在一定程度上克服這些限制。稍后再詳細介紹,但首先,GitHub應該得到解釋,因為它經常在與Git相同的對話中被引用。Git是一個版本控制工具,而GitHub是Git管理工具,它為用戶提供了一個通用的位置來存儲所有已創建的Git存儲庫,從理論上講,它使管理起來更加容易。GitHub負責推廣Git,但它當然不是唯一的Git管理工具,其他工具各有不同的功能和方法。
并行開發
在Git興起的同時,軟件開發的本質也發生了變化。項目變得越來越大,越來越復雜,通常涉及分散在世界各地的更大的團隊。用戶不僅希望對源代碼進行版本控制,還常常希望包含二進制文件,以將與項目關聯的所有內容都放在一個位置。物聯網進一步加速了這一過程。如今,即使在小型組織中,千兆位存儲庫也已司空見慣,這給公司施加了壓力,要求它們確保數字IP安全,可訪問和可審計,同時又不減慢開發過程。此外,我們還更加關注數字資產的整個生命周期,而不僅僅是其最初的開發。這些驅動因素意味著Git的角色需要仔細考慮。
安全性
物聯網有使我們退縮到30年前的時間,因為我們在構建網絡堆棧時沒有采取固有的安全措施,因此有遭受大規模DDOS攻擊的風險。圍繞安全性,各種軟件開發都需要更加嚴格和盡職調查;不僅要滿足合規性和法規要求,還要滿足安全性要求。Git的體系結構不包括經過驗證的歷史記錄之外的安全性(無身份驗證,無權限);但這并不是批評,因為它并非旨在作為安全工具。
Git管理可用于引入安全性,但是安全性的性質和級別會有所不同。有些工具提供了在存儲庫級別上對文件的訪問,因此安全性是一無所有:用戶可以訪問存儲庫中的所有文件,或者根本不能訪問。其他工具在存儲庫和分支級別提供訪問控制。更高級的工具可提供更細粒度的安全性。例如,Perforce Helix提供了跨IP地址,用戶和組的訪問控制(以及試圖訪問的任何人的可見性),并且在本地或授權位置的代碼存儲庫,分支,目錄或單個文件級別具有可執行性。
大規模開發
Git對于許多較小的項目和團隊來說是不錯的選擇,但是當項目增長時,它很快就變得毫無用處。這是由于它的體系結構:一個Git存儲庫在內部組織成一棵樹,其中每個節點代表對一組文件的更改,并通過散列對其之前的更改進行加密保護。每個存儲庫都需要提供其整個歷史記錄,因此,在大型項目中,下載(“克隆”)存儲庫可能會從幾秒鐘縮短到幾分鐘甚至幾小時。
縮小項目規模不是一個選擇:用戶會被最初指定的Git存儲庫配置所困擾;它無法拆分。擁有大量存儲庫是一些組織嘗試的一種方法,但是正如他們發現的那樣,管理數百個Git存儲庫非常困難-因此,術語“ Git蔓延”。不再有整個項目的單一視圖。雖然可以將所有這些存儲庫重新“縫合”在一起,但這會帶來很多額外的工作。在廣泛采用Git的組織中,雇用團隊來管理Git并不少見,因此使Git變得可行所需的進一步投資可能會抵消Git最初的低成本。
Git管理工具會有所幫助,因為它們可以在很大程度上添加方法,以使Git在大型環境中更易于管理。例如,Perforce Helix使用戶可以靈活地將項目回顧性地分成較小的塊。事實證明,Git管理工具非常流行,并且確實可以解決一些實際問題。同樣,盡管很難向開發人員強制要求他們不能使用Git,但許多知道無法避免復雜的大規模開發環境的組織選擇盡可能避免使用Git。
“ Git對于許多較小的項目和團隊來說很好,但是當項目增長時,它很快變得毫無用處。” 斯文·埃里克·諾普(Sven Erik Knop)
“單一事實來源”
在嵌入式開發中,組織通常希望將與項目相關的所有內容都包含為“單一事實來源”,所有數字資產都集中在一個地方,完全可追溯且可見。它日益被視為DevOps的基本要求,并通過提供項目的單一,不變的歷史記錄來支持合規性流程。
在嵌入式市場中,開發環境通常包括各種各樣的二進制文件,這些文件通常很大且格式不同。問題在于二進制文件在Git中不容易版本化-即使使用GitLFS也會導致大量資產更新-因此公司最終可能會在其他系統中存儲二進制資產,從而破壞了“單一事實來源”。此外,項目可能包括軟件開發團隊之外的人員,他們認為Git不易于使用。
混合解決方案
雖然Git不會很快消失,但是與復雜的大型開發項目相關的問題也不會消失。有多種選擇,包括同時支持Git和其他版本控制環境(例如Perforce Helix),分布式和集中式版本控制的混合系統。諸如“狹窄克隆”之類的技術還可以通過將無用的源代碼分成較小的塊來提供幫助,但是,這又是組織必須在工作量和預算中考慮的額外工作。
總體信息是:Git提供了很多功能,并且在將版本控制帶給新用戶方面發揮了巨大作用。但是,當項目開始擴展或變得更加復雜時,尤其是在成本,安全性,速度和靈活性方面,其企業級部署需要仔細考慮和管理。幸運的是,實現這一目標的方法越來越多,而且這些方法還將繼續發展,從而為公司提供更多選擇。