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