如何恢復資料(如何恢復資料卡背景)
678
2022-05-30
目錄
文章目錄
目錄
Git 分布式版本控制系統
Git 的基本概念
Git 的倉庫結構
Git 的核心對象
Git 的數據結構
Git Flow
參考文檔
Git 分布式版本控制系統
Git 是一個免費的、開源的分布式版本控制系統(Version Control System),本質是一個內容尋址文件系統(Content addressable filesystem)。即:Git 的核心是一個簡單的鍵值對數據庫(Simple key-value data store)。
你可以向 Git 插入任意類型的內容,它會返回一個鍵值(Hash,SHA-1 散列),通過該鍵值可以在任意時刻再次檢索該內容,而這些數據全部是存儲在 .git/objects 目錄內。
Git 的基本概念
Working Area:本地工作區,對應的文件狀態是 Modified(已修改)但還沒保存到數據庫中。
Index/Stage:本地暫存區,對應的文件狀態是 Staged,Git 已經對該文件做了標記,下次提交就知道要包含它了。
Local Repository:本地倉庫,存放本地歷史版本信息。對應的文件狀態是 Committed,文件已經安全的保存在本地數據庫中。
Remote Repository:遠程倉庫。
HEAD:當前版本指針,上一個版本是 HEAD^,以此類推。
Git 的倉庫結構
一個完整的 Git 倉庫也就是 .git 目錄,在這個 Local Repo 中存儲了 Git 所有的模型對象。
Git 的核心對象
Git 主要有四個對象,分別是 Blob、Tree、Commit、Tag 他們都用 SHA-1 Key 進行命名。
Key:是一個由 40 個十六進制字符組成的字符串。前兩個字符用于命名子目錄,余下的 38 個字符則用作文件名,這樣處理是因為檢索優化策略,提高文件系統效率。
Value:
Commit:Actual git commits(提交)= Tree + Blob 的 Snapshot(被追蹤的最頂層的 Tree)。
Tree:Directoy(目錄樹),就是一個文件夾。
Blob:file content(文件內容),就是單個的文件。
Tag:是一個 “固化的分支”,一旦打上 tag 之后,這個 tag 代表的內容將永遠不可變,因為 tag 只會關聯當時版本庫中最后一個 commit 對象。
注:Branch 與 Tag 不同,Branch 會隨著不斷的提交,內容會不斷的改變,因為分支指向的最后一個 Commit 不斷改變。所以一般應用或者軟件版本的發布一般用 Tag。
Git 的數據結構
Git 記錄了每個 Snapshot 的 Parent,也就是當前這個目錄的上一個版本。那么 Snapshot 迭代更新的過程就可以表示為一個有向無環圖。
每個快照都對應了一次 Commit,這就是 Git 的數據模型:
class commit { array
1
2
3
4
5
6
Git Flow
最簡單的 Git Flow 主要有三步:
在工作區修改文件。
將文件的快照放入暫存區。
找到暫存區的文件,將快照永久性存儲到 Local Repo。
詳細的說,Git Flow 的項目存在兩個長期分支。
主分支(Master branch):存放對外發布的版本,任何時候在這個分支拿到的,都是穩定的分布版;
開發分支(Develop branch):用于日常開發,存放最新的開發版。
其次,項目存在三種短期分支,一旦完成開發,它們就會被合并進 Develop 或 Master branch,然后被刪除:
功能分支(Feature branch)
補丁分支(Hotfix branch)
預發分支(Release branch)
Git Flow 的優點是清晰可控,缺點是相對復雜,需要同時維護兩個長期分支。這個模式是面向 “版本發布” 的,并不適用于 “持續發布(代碼一有變動,就部署一次)” 的場景。
參考文檔
https://mp.weixin.qq.com/s/l5JU9e6_HrS_-ixiBIrqsA
Git 分布式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。