git獲取linux核心原始碼及分支管理
1. 環境:ubuntu12.04.
2. git安裝:sudo apt-get install git-core ,安裝完後檢視版本如下:
3. 獲取linux核心原始碼:
在kernel的官網上有三種版本,mainline,stable,longterm
mainline是主線版本,最新的,
stable是穩定版,
longterm是長期支援版,
還有一個是eol,當然就是不再支援了。
獲取核心原始碼可以通過到官網去下載,也可以通過git的方式進行獲取。通過網上下載的方法慢且不方便,每次都得全部下載,通過git下載除了第一次要全部下載外後續的下載都比較快,且獲取不同版本的核心也很方便,管理方便,與使用SVN獲取程式碼類似,只需要執行checkout命令即可。下面介紹如何利用git獲取原始碼:
新建一個資料夾,在該資料夾下 使用git命令git clone URL獲取linux核心原始碼如下:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
該指令的源地址可以到linux kernel的官方網站(https://www.kernel.org/)獲得,點選gitweb選項卡在彈出的介面中切換到第一項選項卡在頂部或底部可以看到git源地址如下:
以上地址用第一個即可,第一次獲取原始碼會比較久,後續再進行獲取及其它版本的獲取就比較快了。獲取完原始碼後會在核心原始碼的頂層目錄下看到一個隱藏的.git資料夾,該資料夾是git用於版本庫管理的資料夾,對linux原始碼本身無影響,這跟SVN的是類似的。
4. 查詢下載的原始碼的版本:
下載原始碼後可以通過在原始碼頂層目錄下執行make kernelversion命令查詢原始碼的版本,如下
也可以通過開啟原始碼頂層目錄下的Makefile檔案在檔案開始處看到,如下
注意:要檢視當前執行的系統的核心版本可以使用uname -a,如下
當然,也可行通過檢視相關檔案知道當前執行系統的核心版本。
5. 獲取不同版本的kernel及分支管理:
很多時候不僅需要最新穩定版本的核心,也需要以前版本的穩定核心,這時可以通過git的branch和checkout命令實現(必須是先完成了3中的clone才能切換到其它版本進行其它版本原始碼的獲取)。
檢視branch的幫助資訊可瞭解branch的使用方法,如下:
其中選項r可以檢視遠端的分支版本,選項a可以檢視本地和遠端的分支版本,通過在branch後加分支名可以建立分支,選項d是刪除前合併分支,D則是強制刪除。
建立分支:git branch <分支名>
切換分支: git checkout <分支名>
該語句和上一個語句可以和起來用一個語句表示:git checkout -b <分支名>
刪除分支:git branch -d <分支名>, 如果該分支沒有合併到主分支會報錯,可以用命令git branch -D <分支名>強制刪除。
通過git branch -a檢視本地和遠端的分支如下:
其中最前面的v3.8.12和v3.8.y這兩個是我建立的本地的分支,以remotes開頭的為遠端的分支,第一行的*(no branch)中的*號是用於標示當前所在的本地分支,由於我當前是在遠端分支remotes/origin/linux-3.8.y所以會顯示*(no branch)。通過切換分支命令切換到不同的分支,如下切換到本地分支v3.8.12
注:由於我在建立本地的v3.8.12的時候是在遠端的3.9.0-rc6的版本上建立的,所以切換到v3.8.12的時候檢出的是3.9.0-rc的原始碼(通過修改3.9.0可得新的分支,此出只為說明用),可以通過make kernelversion檢視確認。由於切換到了本地的分支,所以檢視分支時看到*號指向了v3.8.12。當然如果你想建立一個新的版本庫最好不要在已有的分支或master上進行建立,否則新的建立的分支會以當前的分支進行檢出,如上。
刪除並檢視本地分支如下:
從以上命令執行可知,git不能刪除當前所在的分支,必須退出要刪除的分支才能對該分支進行刪除。通過執行git checkout remotes/origin/linux-3.8.y
切換到遠端分支獲取3.8.8版本的核心原始碼,整個獲取過程不到一分鐘。同樣的,可以檢出其它版本的linux核心原始碼,若不清楚遠端都有些什麼版本可以通過git branch -r或-a查詢,選項r只能查遠端版本,選項a會把本地和遠端的版本都列出。
現在大家都知道git 獲取的可不僅僅是“最新”的程式碼,還包括歷史程式碼。 你還可以用 git log, git tag, git branch -a.git branch -r 等命令檢視核心程式碼的歷史資訊, 標籤資訊(不同的正式版本應該都打有相應標籤),分支資訊等。 可以用 git checkout xxx 的命令來切換到 xxx 版本,xxx就是通過用git branch -a.git branch -r 命令查到的版本。
git還會涉及到一些分支的合併、提交等的問題,此處不作介紹。
6 . git、svn與gitHub
git是分散式的版本管理系統,SVN是集中式的版本管理系統。也就是說git可以進行本地提交和檢出(可以是本地的單個人或多人間,此時類似SVN,其中某個人的電腦充當了伺服器),不需要遠端伺服器干涉,比如進行了修改後可以進行本地的提交,也可以檢出進行再次修改,等到最終確定OK後如果需要,再提交到遠端的版本庫中,這樣就會大大減輕遠端伺服器的負擔,特別適合於開源專案的版本管理,目前linux、android等大型開源專案都是通過git進行管理的,因為這些開源專案面向的是全球,所有人都可能會進行訪問。
而SVN則不能,SVN必須是直接提交到遠端伺服器的版本庫中,沒有遠端的伺服器就無法提交或檢出,這樣如果很多人對伺服器進行訪問就會對伺服器 造成很大的負擔甚至癱瘓,所以SVN這種集中式的管理方式不適合開源專案的版本管理,比較適合公司或個人的非開源專案的程式碼版本管理。
github是基於git的用於提供程式碼的託管,GitHub可以託管各種git庫,GitHub專案本身自然而然的也在GitHub上進行託管,只不過在一個私有的,公共檢視不可見的庫中。對於gitHub的使用,要進行使用者的註冊,開源專案可以免費託管(你可以免費申請託管你自己的開源專案),但私有庫則並不如此,更多相關資料和使用方法可以在網上查,此文不作介紹。