學會使用Git

2021-06-10 01:36:18 字數 2181 閱讀 6098

作為一名人民的好幹部,如果希望被惦記,可以學我們的鄭書記,將自己和藹可親的光輝形象搬上檯曆;作為一名有夢想有追求而又不知道如何出名的人,你可以參考對岸的「超想被包養」社團。而作為乙個核心愛好者,要想成為一名核心開發者,為核心貢獻自己的**,我們必須要能夠與其他眾多的核心開發者協同工作,這就意味著應該能夠使用核心的版本控制工具git管理核心**。

1. 什麼是git

git是linus專門為核心而開發的乙個開放原始碼的版本控制軟體,如下圖所示,git的主頁很好的回答了git是什麼的問題。

git是一款免費的、開源的、分布式的版本控制系統,旨在快速高效地處理無論規模大小的任何軟體工程。每乙個git clone(轉殖)都是乙個含有全部專案歷史記錄的檔案倉庫(repository),具有完整的版本修訂追蹤能力,它不依賴於網路連線或中心伺服器,建立分支(branching)和合併分支(merging)非常的快速和簡單。

目前,已經有越來越多的著名專案採用git來管理專案的開發,比如perl、gnome、wine等等。(注意,在ubuntu/debian上,安裝的是git-core,而不是git)

2. git的由來

linus於2023年2月開始使用bitkeeper作為核心的版本控制工具。但是bitmover公司在商業版的bitkeeper之外,提供的bitkeeper只是僅可免費使用但不允許加以修改開放的精簡版,因此,包括gnu之父richard stallman之內的很多人,對linus使用bitkeeper感到不滿。

然而,當時市場上並沒有其他具備bitkeeper類似功能的自由軟體可用,於是有些人就嘗試對其進行逆向工程,這惹惱了bitmover,該公司於是決定停止提供bitkeeper的免費版本。為解決無工具可用的窘境,linus便自行開發git,希望在適當的工具出現前,暫時得充當解決方案。當時linus曾稱git為愚蠢的內容管理器(the stupid content tracker)。當git有了迅速成長之後,linus就建議能夠以其作為長期的解決方案,並於之後的2.6.12-rc3核心第一次採用git進行發布。

3. 一段錄影

在git歷史上有段很著名的錄影,是linus在google的乙個演講,我們可以在youtube上看到它。在這段錄影中,linus說明了設計git的原因,基本的設計哲學,以及與其他版本控制工具的比較。

從技術的觀點上,linus非常尖銳的批判了cvs與svn。雖然linus從來沒有使用過cvs去管理核心**,但是他在商業公司曾有過一段不短時間的使用經歷,而且對其強烈的厭惡。同時他批判svn是毫無意義的,因為svn嘗試從各方面去改善cvs的一些缺點,卻無法根本的解決一些基本的使用限制。具體來說就是,svn改善了建立分支的所耗費的成本,相對cvs利用了比較少的系統資源,但是卻無法解決合併分支的需求。但是許多專案的開發過程中,都時常需要為不同的新功能建立分支、合併分支,如此依賴,svn就成為乙個沒有未來的專案。

git作為乙個分布式的版本控制工具,你可以隨意的建立新分支,進行修改、測試、提交,這些在本地的提交完全不會影響到其他人,可以等到工作完成後再提交給公共的倉庫。這樣就可以支援離線工作,本地提交可以稍後提交到伺服器上。

linus提到,在核心開發社群中有一種信任關係(web of trust),像核心這樣龐大的專案,每個版本參與的開發者都非常多,但是linus不可能認識這麼多的人,自然地,他只能信任最為熟悉的極少數人,並相信那些人的智商與能力是足以信賴的,於是他只需要信賴這些人的成果,而同時這些人又在自己的信任圈力找到他可以信賴的人,於是利用這樣的信賴機制擴充套件成了網狀的核心開發社群。

實際上,社群中也會演化出幾個角色,比如司令(dictator)、副官(lieutenants)、開發者,少數的副官只需要專注在他們熟悉的領域,整合開發者的成果,並提交給司令做最後的整合決策,這樣一來,各種不同的領域都可以交給最為熟悉的開發者去管理,而專案開發本身不會被限制阻塞在某個角色身上,相對而言是一種比較高效的開發社群結構。

4. 一些資源

這篇文章詳細描述了如何使用git來管理核心**。

這就是上面提到的那段著名的錄影,相信認真的消化之後會有不小的收穫。

git的中文教程。

這是kanru翻譯的《為什麼git比x更好》,簡要的說明了git與其他版本控制工具的比較,可以讓你了解各種工具之間的差異細節。

很多人說正是github讓他們選擇了git,相比其他的專案託管**,它更象乙個社交網路,可以追蹤別人的狀態,不過追蹤的不是朋友發出的資訊,而是朋友寫出的**。人們可以在github上找到與他們在做的事相關的其他開發人員或專案,然後輕鬆地fork和貢獻,這樣形成了乙個以git和各種專案為中心的活躍社群。

半小時學會使用Git(三)

這是半小時學會使用git的第三篇文,也是最後一篇。本系列文章只著眼於git的日常使用場景,若是有小夥伴想要好好研究git,本系列文可能幫不到你。本文主要記錄使用git的過程中比較常用的兩個場景 分支管理和標籤管理。我們已經知道head指標所指向的分支,就是我們現在正處於的分支。分支是為了解決多人協作...

學會使用SafeArray

學會使用safearray也是很重要的,因為在ado程式設計中經常要用。它的主要目的是用於automation中的陣列型引數的傳遞。因為在網路環境中,陣列是不能直接傳遞的,而必須將其包裝成safearray。實質上safearray就是將通常的陣列增加乙個描述符,說明其維數 長度 邊界 元素型別等資...

學會使用SafeArray

學會使用safearray也是很重要的,因為在ado程式設計中經常要用。它的主要目的是用於automation中的陣列型引數的傳遞。因為在網路環境中,陣列是不能直接傳遞的,而必須將其包裝成safearray。實質上safearray就是將通常的陣列增加乙個描述符,說明其維數 長度 邊界 元素型別等資...