1. 環(huán)境:ubuntu12.04.
2. git安裝:sudo apt-get install git-core ,安裝完后查看版本如下:
3. 獲取linux內(nèi)核源碼:
在kernel的官網(wǎng)上有三種版本,mainline,stable,longterm
mainline是主線版本,最新的,
stable是穩(wěn)定版,
longterm是長(zhǎng)期支持版,
還有一個(gè)是eol,當(dāng)然就是不再支持了。
獲取內(nèi)核源碼可以通過(guò)到官網(wǎng)去下載,也可以通過(guò)git的方式進(jìn)行獲取。通過(guò)網(wǎng)上下載的方法慢且不方便,每次都得全部下載,通過(guò)git下載除了第一次要全部下載外后續(xù)的下載都比較快,且獲取不同版本的內(nèi)核也很方便,管理方便,與使用SVN獲取代碼類似,只需要執(zhí)行checkout命令即可。下面介紹如何利用git獲取源碼:
新建一個(gè)文件夾,在該文件夾下 使用git命令git clone URL獲取linux內(nèi)核源碼如下:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
該指令的源地址可以到linux kernel的官方網(wǎng)站(https://www.kernel.org/)獲得,點(diǎn)擊gitweb選項(xiàng)卡在彈出的界面中切換到第一項(xiàng)選項(xiàng)卡在頂部或底部可以看到git源地址如下:
以上地址用第一個(gè)即可,第一次獲取源碼會(huì)比較久,后續(xù)再進(jìn)行獲取及其它版本的獲取就比較快了。獲取完源碼后會(huì)在內(nèi)核源碼的頂層目錄下看到一個(gè)隱藏的.git文件夾,該文件夾是git用于版本庫(kù)管理的文件夾,對(duì)linux源碼本身無(wú)影響,這跟SVN的是類似的。
4. 查詢下載的源碼的版本:
下載源碼后可以通過(guò)在源碼頂層目錄下執(zhí)行make kernelversion命令查詢?cè)创a的版本,如下
也可以通過(guò)打開(kāi)源碼頂層目錄下的Makefile文件在文件開(kāi)始處看到,如下
注意:要查看當(dāng)前運(yùn)行的系統(tǒng)的內(nèi)核版本可以使用uname -a,如下
當(dāng)然,也可行通過(guò)查看相關(guān)文件知道當(dāng)前運(yùn)行系統(tǒng)的內(nèi)核版本。
5. 獲取不同版本的kernel及分支管理:
很多時(shí)候不僅需要最新穩(wěn)定版本的內(nèi)核,也需要以前版本的穩(wěn)定內(nèi)核,這時(shí)可以通過(guò)git的branch和checkout命令實(shí)現(xiàn)(必須是先完成了3中的clone才能切換到其它版本進(jìn)行其它版本源碼的獲取)。
查看branch的幫助信息可了解branch的使用方法,如下:
其中選項(xiàng)r可以查看遠(yuǎn)程的分支版本,選項(xiàng)a可以查看本地和遠(yuǎn)程的分支版本,通過(guò)在branch后加分支名可以創(chuàng)建分支,選項(xiàng)d是刪除前合并分支,D則是強(qiáng)制刪除。
創(chuàng)建分支:
刪除分支:git branch -d <分支名>,
通過(guò)git branch -a查看本地和遠(yuǎn)程的分支如下:
其中最前面的v3.8.12和v3.8.y這兩個(gè)是我創(chuàng)建的本地的分支,以remotes開(kāi)頭的為遠(yuǎn)程的分支,第一行的*(no branch)中的*號(hào)是用于標(biāo)示當(dāng)前所在的本地分支,由于我當(dāng)前是在遠(yuǎn)程分支remotes/origin/linux-3.8.y所以會(huì)顯示*(no branch)。通過(guò)切換分支命令切換到不同的分支,如下切換到本地分支v3.8.12
注:由于我在創(chuàng)建本地的v3.8.12的時(shí)候是在遠(yuǎn)程的3.9.0-rc6的版本上創(chuàng)建的,所以切換到v3.8.12的時(shí)候檢出的是3.9.0-rc的源碼(通過(guò)修改3.9.0可得新的分支,此出只為說(shuō)明用),可以通過(guò)make kernelversion查看確認(rèn)。由于切換到了本地的分支,所以查看分支時(shí)看到*號(hào)指向了v3.8.12。當(dāng)然如果你想創(chuàng)建一個(gè)新的版本庫(kù)最好不要在已有的分支或master上進(jìn)行創(chuàng)建,否則新的創(chuàng)建的分支會(huì)以當(dāng)前的分支進(jìn)行檢出,如上。
刪除并查看本地分支如下:
從以上命令執(zhí)行可知,git不能刪除當(dāng)前所在的分支,必須退出要?jiǎng)h除的分支才能對(duì)該分支進(jìn)行刪除。通過(guò)執(zhí)行g(shù)it checkout remotes/origin/linux-3.8.y
切換到遠(yuǎn)程分支獲取3.8.8版本的內(nèi)核源碼,整個(gè)獲取過(guò)程不到一分鐘。同樣的,可以檢出其它版本的linux內(nèi)核源碼,若不清楚遠(yuǎn)程都有些什么版本可以通過(guò)git branch -r或-a查詢,選項(xiàng)r只能查遠(yuǎn)程版本,選項(xiàng)a會(huì)把本地和遠(yuǎn)程的版本都列出。
現(xiàn)在大家都知道git 獲取的可不僅僅是“最新”的代碼,還包括歷史代碼。 你還可以用 git log, git tag, git branch -a.git branch -r 等命令查看內(nèi)核代碼的歷史信息, 標(biāo)簽信息(不同的正式版本應(yīng)該都打有相應(yīng)標(biāo)簽),分支信息等。 可以用 git checkout xxx 的命令來(lái)切換到 xxx 版本,xxx就是通過(guò)用git branch -a.git branch -r 命令查到的版本。
git還會(huì)涉及到一些分支的合并、提交等的問(wèn)題,此處不作介紹。
6 . git、svn與gitHub
git是分布式的版本管理系統(tǒng),SVN是集中式的版本管理系統(tǒng)。也就是說(shuō)git可以進(jìn)行本地提交和檢出(可以是本地的單個(gè)人或多人間,此時(shí)類似SVN,其中某個(gè)人的電腦充當(dāng)了服務(wù)器),不需要遠(yuǎn)程服務(wù)器干涉,比如進(jìn)行了修改后可以進(jìn)行本地的提交,也可以檢出進(jìn)行再次修改,等到最終確定OK后如果需要,再提交到遠(yuǎn)程的版本庫(kù)中,這樣就會(huì)大大減輕遠(yuǎn)程服務(wù)器的負(fù)擔(dān),特別適合于開(kāi)源項(xiàng)目的版本管理,目前l(fā)inux、android等大型開(kāi)源項(xiàng)目都是通過(guò)git進(jìn)行管理的,因?yàn)檫@些開(kāi)源項(xiàng)目面向的是全球,所有人都可能會(huì)進(jìn)行訪問(wèn)。
而SVN則不能,SVN必須是直接提交到遠(yuǎn)程服務(wù)器的版本庫(kù)中,沒(méi)有遠(yuǎn)程的服務(wù)器就無(wú)法提交或檢出,這樣如果很多人對(duì)服務(wù)器進(jìn)行訪問(wèn)就會(huì)對(duì)服務(wù)器 造成很大的負(fù)擔(dān)甚至癱瘓,所以SVN這種集中式的管理方式不適合開(kāi)源項(xiàng)目的版本管理,比較適合公司或個(gè)人的非開(kāi)源項(xiàng)目的代碼版本管理。
github是基于git的用于提供代碼的托管,GitHub可以托管各種git庫(kù),GitHub項(xiàng)目本身自然而然的也在GitHub上進(jìn)行托管,只不過(guò)在一個(gè)私有的,公共視圖不可見(jiàn)的庫(kù)中。對(duì)于gitHub的使用,要進(jìn)行用戶的注冊(cè),開(kāi)源項(xiàng)目可以免費(fèi)托管(你可以免費(fèi)申請(qǐng)托管你自己的開(kāi)源項(xiàng)目),但私有庫(kù)則并不如此,更多相關(guān)資料和使用方法可以在網(wǎng)上查,此文不作介紹。
聯(lián)系客服