深入淺出 Git

2022-05-03 12:45:18 字數 2329 閱讀 6191

如果你遇到這個場景,那你可能需要版本控制

版本控制最主要的功能就是追蹤檔案的變更。它將什麼時候、什麼人更改了檔案的什麼內容等資訊忠實地了已錄下來。每一次檔案的改變,檔案的版本號都將增加。除了記錄版本變更外,版本控制的另乙個重要功能是並行開發。軟體開發往往是多人協同作業,版本控制可以有效地解決版本的同步以及不同開發者之間的開發通訊問題,提高協同開發的效率。並行開發中最常見的不同版本軟體的錯誤(bug)修正問題也可以通過版本控制中分支與合併的方法有效地解決。

版本控制分為集中式、本地式、分布式。

git 是一套以鍵值儲存的檔案定址系統。

workspace:工作區

index:暫存區

repository:倉庫

remote:遠端倉庫

sh1a 演算法

雜湊演算法的一種。對檔案內容進行計算,可以得到乙個雜湊值,形如5453545dccd33565a585ffe5f53fda3e067b84d8

對於內容不同的物件,會計算得到不同的sha1雜湊值。

幾種型別檔案

git 目錄(.git/objects/)的幾種(物件)型別檔案:

blob

index

這裡說的 index 就是上面說的暫存區的實體存在,其實是乙個檔案,位於.git/index,直接開啟會亂碼,可以使用命令git ls-files --stage檢視:

git ls-files --stage

----

100644 92390d97e4159df5c7ef31baf03c8a3378c93395 0 a.txt

100644 ff532afc325d8a07df0e2e3cb37bbee271d05840 0 dirb/b.txt

裡面記錄了所有跟蹤檔案的 blob 物件的雜湊值,以及檔案的路徑。

如果檔案內容沒有改變,index 裡則一直指向舊的雜湊值。

tree

代表的是目錄結構,或者簡單理解為代表乙個目錄。tree 物件也會通過 sha1 演算法生成雜湊值作為指標。tree 物件中包含一條或多條 blob 的指標。

目錄結構如果是一樣的,會共享同乙個 tree 物件。

commit

commit 儲存一次提交的資訊,包括 tree、blob,父節點(的 commit id),以及提交的作者是誰等資訊。

commit 的 id 值就是對物件內容進行 sha1 演算法得到的雜湊值。

git add,生成 blob 檔案,同時 index 檔案中記錄。

git commit 時,根據 index 檔案中記錄的內容,生成 tree 物件和 commit 物件。

分支體現在目錄的./git/refs/heads/中,這裡包含master和一些其他分支檔案。每個分支檔案儲存的是乙個commitid

標籤其實就是儲存了commitid

了解了原理後,再回過頭來看一些常用的 git 命令:

分享個小故事。大家應該都知道 linux ——世界上最知名的開源作業系統,android 系統就是基於 linux 核心開發。它由 linus torvalds 在 1991 年發明,並最終經由開源社群的無數個開發者共同開發,至今仍然是最充滿生命力的作業系統之一。

2005 年,linux 開發團隊一直使用的商業版本控制系統 bitkeeper 宣布不再免費授權社群使用,linus 在各種交涉無果後,花了兩周時間自己用 c 寫了乙個分布式版本控制系統並且開源了,乙個月之內整個 linux 系統的原始碼就交由 git 管理了。至此之後 git 迅速成為最流行的版本控制系統之一。2008 年,github **上線,為開源專案免費提供 git 儲存,總多知名專案紛紛遷移至 github,同時也造福了無數的個人開發者。

git 是如何儲存檔案的

git底層原理

深入淺出學習GIT 一

由於要換工作,新公司使用的是git,而以前只使用過clearcase 和 svn,因此git的學習迫在眉睫。有關版本控制系統的基本概念,這裡就不介紹了。但是為了方便使用過svn的人理解git,還是有必要介紹下集中式版本控制系統和分布式版本控制系統的概念。集中式版本控制系統有哪些?這裡先告訴大家,sv...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...