一步一步學習Git 1 Git概述

2022-07-29 17:24:19 字數 2042 閱讀 8303

現在的版本控制系統中,git的人氣越來越高,可能是因為git是鼎鼎大名的大神linus所寫。最近在學習《版本控制之道——使用git》,打算寫一寫讀書筆記,也順便讓跟我一樣剛接觸的朋友一起來學習。

1. git概述

版本控制系統(version control system, vcs)是用來幫助我們記錄和追蹤專案中各個檔案的變化。傳統的vcs有我們熟知的cvs,svn。有傳統當然有新穎的,git就是這樣一種新穎的版本控制系統,簡單來說: git是一種分布式版本控制系統(distributed version control system, dvcs)。dvcs跟傳統的vcs的區別就在於互相同步修改內容的方式不同。

下面我們將一步一步地逐漸認識git。

2. 版本庫

版本庫(repository)是版本控制系統用來儲存所有歷史資料的地方。比如說,儲存檔案的當前狀態,歷史修改時間,修改人員,修改原因等等。你可以把它想象為乙個監控系統,只要你對裡面的東西做過什麼動作,它都記錄得清清楚楚。

cvs和svn這類版本控制系統屬於集中是版本庫模式,就是說,所有人都會把各自的修改提交到伺服器上的乙個公共版本庫,而他們在本地也有乙個工作目錄樹(待會再解釋),其內容就是版本庫中最新的**。如果要查詢歷史,就得詢問伺服器上的版本庫,這往往就需要網路,而我們知道,不是任何時候都可以上網,這就是侷限性。

如果你使用的是git,那麼這個問題就解決了,因為git是分布式版本控制系統,所以你在本地會有自己的版本庫,你的所有歷史都儲存在本地的版本庫中。所以提交**無須連線遠端版本庫,而是直接儲存在本地版本庫上面了。那麼這裡你可能有疑問:程式設計師如何同步?當然,還是要將修改上傳到專案的主版本庫,以後慢慢再學習。

3. 工作目錄樹

剛才提到過這個概念。什麼是工作目錄樹(working tree)?工作目錄樹是版本庫的乙個「檢視」,包括這個專案中所有的檔案。這裡要區分好版本庫跟工作目錄樹。在git中,版本庫是儲存在本地工作目錄樹的「.git」目錄中(具體之後再講)。而工作目錄樹是怎麼來的?兩種方法:一是初始化命令,二是轉殖乙個版本庫,這些以後具體再說。簡單說,就是你通過這兩種方法中任何一種,生成了乙個工作目錄樹,其中有乙個目錄叫「.git」,這個目錄就是版本庫。也不複雜吧:)

4. git記錄跟蹤專案的方法

許多版本控制系統都是以檔案為儲存單位來儲存,但是git只是記錄和跟蹤組成該檔案的各部分內容:若干字元和**行。 git同時為這些內容新增了一系列元資料,比如檔名,檔案屬性等等。 git使用這種方法就降低了所需的磁碟空間了。這部分內容現在聽起來會比較亂,我們以後再慢慢補充。

5. 標籤

在你的專案中,一定有某乙個點你需要作乙個標記,比如說,你想發布乙個版本。這時候也許你就要用到標籤了,你可以為你的專案貼個標籤,例如乙個版本號,然後把你專案中所有**都打包起來。

6. 分支與合併

假定你停留在乙個問題上,想嘗試編寫**解決這個問題,但是很有可能這個方法行不通,又怕到時候修改了**恢復難。這個時候分支可以幫你解決問題。你可以在主幹上建立一條新的分支,用這條分支來作為嘗試,在這條分支上面修改**,當然,這上面的修改並不影響主幹上的**。試驗得出結果後,如果你不想要,也可以刪除這條分支。

大部分分支還是需要合併到其他分支上面去的。合併,顧名思義,也就是把各個分支上面的修改都統一到乙個分支上面來。這個是由git來完成的,git會比較各個分支之間的變化,確定變化後再進行合併。如果存在衝突,git會告訴你發生了衝突,等著你自己來解決了。在這方面,git提供了幾種方法來解決衝突,這個以後我們再學習。

7. 鎖機制

鎖機制有兩種,一種叫做嚴格鎖。比如說,你現在修改這個檔案,那麼在你修改完並提交之前是沒人能夠修改這檔案的,顯然這不是高效率的方法,所以現在的版本控制系統都採用另外一種鎖機制,叫樂觀鎖。當然跟嚴格鎖相反,你可以和別人同時共同修改同乙個檔案,但是這裡有一點需要注意的是提交的順序所導致的問題:舉個例子,兩個人a和b同時修改了檔案test.c,a修改後提交了,b修改後想提交,那麼git會通知b,在b修改的時候已經有人提交過新版本了,需要b確認是否存在衝突後進行提交。其實也不複雜,都是按照正常邏輯思維就可以明白的,呵呵。

sudo apt-get install git-core git-doc

注意看看需要哪些軟體包作為前提,然後先安裝這些軟體就行了。

end

一步一步學習openfire spark(1)

以前寫過一篇關於 openfire 的文章,內容比較孤立,寫的也比較簡單。沒有實際意義。正好公司使用的是這個平台,現在從新開始,對 openfire 這個框架進行系統性的學習。深入的了解 openfire 以及和openfire 配套的spark 的開發。研究意義 這個詞是寫 的時候學的,當時不太明...

一步一步學習IdentityServer3 8

identityserver3結合hangfire及cookies中介軟體實現授權 idr3資料庫token過期管理 globalconfiguration.configuration.usesqlserverstorage hangfire globalconfiguration.configur...

一步一步學習IdentityServer3 4

其實上述例子 很多都很找到 但是在實際生態環境中給例子有很多不一樣的地方 比如自定已登入介面怎麼做?怎麼訪問自己的使用者資料庫實現登入?怎麼在介面中使用,在介面中又怎麼實現與idr3結合授權?等等問題 解下來我會在實際專案中整體一步一步介紹 1 這是我自定義登入的介面 2 在授權同意頁面 3 下圖是...