2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

使用 Git 管理源代碼

 xrzs 2010-02-14
Git 是 Linux Torvalds 為了幫助管理 Linux? 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。我們可以自己下載這個(gè)軟件用于對(duì)內(nèi)核的 hack 分析,或者用來(lái)管理自己的軟件開發(fā)項(xiàng)目。本文將向您展示如何使用 Git 工具開始分析 Linux 。

在現(xiàn)代軟件開發(fā)項(xiàng)目中,要成為一個(gè)有效的軟件開發(fā)人員,我們必須能夠與其他項(xiàng)目貢獻(xiàn)者并行進(jìn)行開發(fā)。源代碼管理(SCM)系統(tǒng)不是什么新思想。為了編寫一些能夠更快速、簡(jiǎn)單地開發(fā)以后軟件項(xiàng)目的軟件,已經(jīng)進(jìn)行了很多嘗試。最新的源代碼解決方案都包含了版本控制系統(tǒng),它可以對(duì)源代碼的修改進(jìn)行回滾,從而將有害的代碼剔除出項(xiàng)目之外,或者簡(jiǎn)單地跟蹤哪些人修改了代碼的哪些行的內(nèi)容。版本控制系統(tǒng)試圖解決開發(fā)人員在試圖同時(shí)對(duì)某個(gè)文件進(jìn)行修改時(shí)所出現(xiàn)的沖突問(wèn)題,可以防止用戶覆蓋其他人所作的修改。源代碼管理使用的很多流行解決方案都試圖解決以前 SCM 解決方案中的失效問(wèn)題。

集中化的版本控制系統(tǒng)通常采用兩種方式:

  • 有些提供了文件鎖來(lái)防止多個(gè)用戶的并行訪問(wèn)。這些系統(tǒng)對(duì)文件進(jìn)行加鎖,這樣在某個(gè)時(shí)間只有一個(gè)開發(fā)人員對(duì)中心倉(cāng)庫(kù)具有寫入權(quán)限。
  • 另外一些工具,例如 CVS,允許多個(gè)開發(fā)人員同時(shí)對(duì)相同的文件進(jìn)行編輯,并提供了一些機(jī)制稍后合并這些修改。

流行的版本控制系統(tǒng)包括:

  • CVS
  • Subversion
  • Arch
  • Bazaar
  • BitKeeper

什么是 Git?

非常簡(jiǎn)單地說(shuō),Git 是 Linus Torvalds 最近實(shí)現(xiàn)的源代碼管理軟件。正如所提供的文檔中說(shuō)的一樣,“Git 是一個(gè)快速、可擴(kuò)展的分布式版本控制系統(tǒng),它具有極為豐富的命令集,對(duì)內(nèi)部系統(tǒng)提供了高級(jí)操作和完全訪問(wèn)?!?/p>

Torvalds 開始著手開發(fā) Git 是為了作為一種過(guò)渡方案來(lái)替代 BitKeeper,后者之前一直是 Linux 內(nèi)核開發(fā)人員在全球使用的主要源代碼工具。開放源碼社區(qū)中的有些人覺(jué)得 BitKeeper 的許可證并不適合開放源碼社區(qū)的工作,因此 Torvalds 決定著手研究許可證更為靈活的版本控制系統(tǒng)。盡管最初 Git 的開發(fā)是為了輔助 Linux 內(nèi)核開發(fā)的過(guò)程,但是我們已經(jīng)發(fā)現(xiàn)在很多其他自由軟件項(xiàng)目中也使用了 Git。例如,X.org 最近就遷移到 Git 上來(lái)了,很多 Freedesktop.org 的項(xiàng)目也遷移到了 Git 上。

Git 目前主要由尋找 CVS 或?qū)S写a管理解決方案替代物的軟件開發(fā)人員所使用。Git 與 CVS 有很多區(qū)別:

  • 分支更快、更容易。
  • 支持離線工作;本地提交可以稍后提交到服務(wù)器上。
  • Git 提交都是原子的,且是整個(gè)項(xiàng)目范圍的,而不像 CVS 中一樣是對(duì)每個(gè)文件的。
  • Git 中的每個(gè)工作樹都包含一個(gè)具有完整項(xiàng)目歷史的倉(cāng)庫(kù)。
  • 沒(méi)有哪一個(gè) Git 倉(cāng)庫(kù)會(huì)天生比其他倉(cāng)庫(kù)更重要。




回頁(yè)首


安裝

要安裝當(dāng)前版本的 Git,我們可以使用供應(yīng)商在 Linux 發(fā)行版中提供的包,或者從最新的穩(wěn)定快照開始手工進(jìn)行編譯。我建議下載包含最新 Git 源代碼穩(wěn)定快照的 tarball;截止到撰寫本文時(shí)這個(gè)版本是 v1.4.0。我們可以在下面的 參考資料 一節(jié)中找到鏈接。

有了這個(gè) tarball 之后,請(qǐng)確保初始安裝所依賴的包都已經(jīng)安裝了。系統(tǒng)中必須包含以下包,以及相應(yīng)的開發(fā)頭文件:

  • zlib
  • libcurl
  • libcrypto(OpenSSL)
  • rsync(2.6.0 或更高版本)

這些條件滿足之后,我們就可以開始編譯初始的 Git 安裝系統(tǒng)了。這個(gè)過(guò)程對(duì)于大部分一直使用 Linux 的開發(fā)人員來(lái)說(shuō)應(yīng)該非常熟悉了。首先使用對(duì)應(yīng)下載的包格式的命令將包展開:

$ tar -jxvf git-1.4.0.tar.bz2
                        

$ tar -zxvf git-1.4.0.tar.gz
                        

然后切換到適當(dāng)?shù)哪夸浿?,并?zhí)行 make 命令。(注意目錄名取決于我們下載的快照的日期。)

$ cd git-1.4.0/
                        $ make prefix=/usr/local install
                        $ sudo make prefix=/usr/local install
                        

您會(huì)被提示輸入 sudo 密碼才能繼續(xù)安裝。現(xiàn)在就已經(jīng)準(zhǔn)備好使用 Git 工具了。





回頁(yè)首


獲得最新的內(nèi)核源代碼樹

在使用 Git 管理源代碼倉(cāng)庫(kù)時(shí),我們可以使用兩種方法開始我們的工作。我們可以使用現(xiàn)有代碼的一個(gè)本地目錄,然后從中生成一個(gè)倉(cāng)庫(kù);也可以映射其他人發(fā)布的倉(cāng)庫(kù)。

對(duì)于本文的目的來(lái)說(shuō),我們將獲得 Torvalds 發(fā)布的 Git 倉(cāng)庫(kù)的一個(gè)鏡像。下面的命令將創(chuàng)建一個(gè)名為 linux-2.6 的 Git 倉(cāng)庫(kù)。這個(gè)目錄包含了一個(gè)隱藏目錄 .git/ 。

$ git-clone                         git://git./pub/scm/linux/kernel/git/torvalds/linux-2.6.git                         linux-2.6
                        

這個(gè)步驟會(huì)執(zhí)行很長(zhǎng)時(shí)間,因?yàn)?Git 正在將內(nèi)核源代碼(這有數(shù)百兆大)從 傳輸?shù)奖镜貦C(jī)器上。輸出結(jié)果可能有些晦澀難懂,但是如果您有一個(gè)快速的 Internet 鏈接,卷屏的速度應(yīng)該相當(dāng)快。輸出結(jié)果應(yīng)該類似于圖 1 所示。


圖 1. 在下載內(nèi)核源代碼樹過(guò)程中產(chǎn)生的輸出
在下載內(nèi)核源代碼樹過(guò)程中產(chǎn)生的輸出

現(xiàn)在切換到包含新下載的內(nèi)核的目錄中:

$ cd linux-2.6
                        

現(xiàn)在,我們應(yīng)該在本地機(jī)器上有一個(gè)可以工作的 Linux 2.6 倉(cāng)庫(kù)了!此時(shí)我們就可以對(duì)這個(gè)倉(cāng)庫(kù)進(jìn)行一些基本的操作了。





回頁(yè)首


更新本地 Git 倉(cāng)庫(kù)

在使用 Git 時(shí),我們通??梢约僭O(shè)自己的倉(cāng)庫(kù)可能比 的倉(cāng)庫(kù)有些滯后。因此我們通常都是首先將自己的倉(cāng)庫(kù)更新成最新的上游內(nèi)核樹。這個(gè)過(guò)程有時(shí)稱為快速合并(fast-forward merge)。嚴(yán)格來(lái)說(shuō),我們現(xiàn)在并不需要執(zhí)行這個(gè)過(guò)程,因?yàn)槲覀儎倓偘惭b了自己的倉(cāng)庫(kù),它應(yīng)該還沒(méi)有過(guò)期。但是檢查一下畢竟沒(méi)有壞處:

$ cd linux-2.6
                        $ git-pull git://git./pub/scm/linux/kernel/git/torvalds/linux-2.6.git
                        ...
                        

如果成功,我們就應(yīng)該會(huì)看到類似于下面的輸出結(jié)果:

receiving file list ... done
                        sent 130 bytes  received 21677 bytes  14538.00 bytes/sec
                        total size is 127865858  speedup is 5863.52
                        Already up-to-date.
                        $>
                        

如果我們的倉(cāng)庫(kù)不是最新的,就會(huì)看到有些內(nèi)容通過(guò)網(wǎng)絡(luò)傳輸?shù)奖镜貦C(jī)器上了。





回頁(yè)首


從倉(cāng)庫(kù)中導(dǎo)出文件

我們需要將文件從 Git 倉(cāng)庫(kù)(隱藏目錄中的那些文件)中導(dǎo)出到工作目錄中才能開始自己的 hack 過(guò)程。下面的命令會(huì)在當(dāng)前目錄中寫入沒(méi)有隱藏的目錄,其中包含了 Linux 的源代碼:

$ git-checkout
                        

如果您希望覆蓋本地修改,可以使用 -f 選項(xiàng)導(dǎo)出文件,這樣就可以將您帶回到一個(gè)干凈的狀態(tài):

$ git-checkout -f
                        

現(xiàn)在在當(dāng)前工作目錄中,我們應(yīng)該就可以看到熟悉的 Linux 源代碼目錄結(jié)構(gòu)了,然后我們可以對(duì)這些源代碼任意進(jìn)行修改。





回頁(yè)首


修改現(xiàn)有文件

我們現(xiàn)在可以修改所選擇的任何文件。舉一個(gè)簡(jiǎn)單的例子來(lái)說(shuō),我們將修改 docs 目錄中的一些內(nèi)容:添加一條以后可以很容易識(shí)別的信息。為了讓我的例子更容易試驗(yàn),我沒(méi)有選擇修改源代碼;不過(guò)只要您希望,歡迎繼續(xù)重寫整個(gè)內(nèi)核的子系統(tǒng)。

首先,讓我們?cè)诰庉嬈髦写蜷_一個(gè)文件:

$ vi ./Documentation/ManagementStyle
                        

顯然,我使用的是 vi;不過(guò)您當(dāng)然可以使用自己喜歡的任何編輯器來(lái)完成這項(xiàng)工作。在編輯文件時(shí),我在第一段前面添加了一行:“Eli shall be in charge of managing sandwich consumption. See Documentation/Sandwiches for more.”

如果您對(duì)自己所做的修改非常滿意,并且覺(jué)得自己已經(jīng)準(zhǔn)備好將其作為倉(cāng)庫(kù)的一個(gè)永久部分了,就需要使用下面的命令導(dǎo)入您的修改:

$ git-commit Documentation/ManagementStyle
                        

您會(huì)被提示說(shuō)要求提供一個(gè)提交消息,它是一個(gè)用戶生成的注釋,用來(lái)幫助其他開發(fā)人員(也可能是您自己以后)理解剛才的實(shí)現(xiàn)到底進(jìn)行了哪些修改。在我們的例子中,提交消息是一個(gè)描述剛才對(duì)文檔所做修改的短句。

如果您希望檢查一下到目前為止工作的狀態(tài),可以執(zhí)行 git-log 來(lái)查看本地倉(cāng)庫(kù)的歷史(它繼承了所克隆的倉(cāng)庫(kù)的信息)。您的提交消息應(yīng)該在日志的最上面。





回頁(yè)首


添加或刪除文件

但是請(qǐng)等一下!我們還沒(méi)有添加 Documentation/Sandwiches 文件呢,因此我們需要將其添加到工作目錄中,并告訴 Git 何時(shí)這個(gè)文件已經(jīng)準(zhǔn)備好了。我使用 echo 命令創(chuàng)建了想要添加的文件,因?yàn)檫@只是一個(gè)簡(jiǎn)單的例子而已。同樣,您也可以使用自己喜歡的工具。

$ echo "Turkey is superior" > Documentation/Sandwiches
                        

現(xiàn)在我們已經(jīng)添加了一個(gè)文件,接下來(lái)需要將這個(gè)文件添加到 Git 中,從而讓 Git 了解這種變化,然后才能提交這個(gè)版本。我們可以通過(guò)執(zhí)行下面的命令來(lái)完成這些任務(wù):

$ git-add Documentation/Sandwiches
                        $ git-commit Documentation/Sandwiches
                        

如果您添加了多個(gè)文件,可以在同一行中的 git-add 命令后面列出這些文件,不過(guò)您也不必一次將它們?nèi)刻砑拥絺}(cāng)庫(kù)中去。如果要?jiǎng)h除某個(gè)文件,并且沒(méi)有 git-add 之類的特殊命令;您只需要?jiǎng)h除這個(gè)文件,然后提交就可以了。

現(xiàn)在應(yīng)該查看一下 git-log,從而確保到現(xiàn)在為止所做的事情都是正確的。這一次,我們將使用 -p 選項(xiàng)來(lái)以單獨(dú)的補(bǔ)丁格式查看日志。

$git-log -p
                        





回頁(yè)首


創(chuàng)建 diff 文件

最后,我們希望生成一個(gè)包含您修改后的文件和原文件之間區(qū)別的文本文件。這個(gè)文件通常是使用 diff 工具創(chuàng)建的,因此就稱為 diff 文件。diff 可以幫助我們創(chuàng)建補(bǔ)丁文件(patch file),后者是我們向很多開放源碼軟件項(xiàng)目發(fā)送代碼提交時(shí)通常使用的方法。有關(guān) diff 的更多內(nèi)容,請(qǐng)參看下面 參考資料 部分中有關(guān) Kernel.org 的鏈接。





回頁(yè)首


Git 還可以干什么?

我們可以使用 Git 來(lái)管理本地倉(cāng)庫(kù),而不用鏡像其他人的工作。例如,如果我們喜歡使用 Git 來(lái)管理自己個(gè)人對(duì)某個(gè)開放源碼項(xiàng)目貢獻(xiàn)的文件,就可以從項(xiàng)目快照中生成一個(gè) Git 倉(cāng)庫(kù)。

假設(shè)我們已經(jīng)有了一個(gè)名為 release.tar.gz 的標(biāo)準(zhǔn) release tarball,可以執(zhí)行下面的命令來(lái)創(chuàng)建一個(gè)本地的 Git 倉(cāng)庫(kù):

$ tar -zxvf release.tar.gz
                        $ cd release
                        $ git init-db
                        

我們可以看到消息說(shuō) Git 是 “默認(rèn)于本地存儲(chǔ)區(qū)域的”。這些消息都是正常的,說(shuō)明我們有一個(gè) Git 倉(cāng)庫(kù)。

現(xiàn)在我們已經(jīng)對(duì)工作目錄進(jìn)行了初始化,接下來(lái)在項(xiàng)目目錄中應(yīng)該會(huì)看到一個(gè)新目錄 .git。為了告訴 Git 我們希望對(duì)這個(gè)項(xiàng)目中的每個(gè)文件都進(jìn)行跟蹤,請(qǐng)執(zhí)行下面的命令:

$ git add .
                        

最后,使用下面的命令將所監(jiān)視的文件提交到倉(cāng)庫(kù)中:

$ git commit -a
                        

同樣,系統(tǒng)會(huì)提示我們輸入提交消息。從現(xiàn)在開始,我們就可以在自己的 Git 倉(cāng)庫(kù)中使用 Git 所提供的完整功能了,例如對(duì)實(shí)驗(yàn)特性進(jìn)行分支,為了追蹤回歸測(cè)試問(wèn)題而將代碼一分為二,并使用常見(jiàn)的版本歷史功能。

有關(guān) Git 的分支管理和其他有趣特性的更多信息,請(qǐng)參看 Kernel.org 上給出的 Git 的優(yōu)秀教程(參見(jiàn) 參考資料 中的鏈接)。





回頁(yè)首


結(jié)束語(yǔ)

現(xiàn)在我們已經(jīng)知道如何使用 Git 來(lái)獲取 Linux 內(nèi)核源代碼和其他 Git 管理的項(xiàng)目了,接下來(lái)可以選擇使用 Git 來(lái)管理下一個(gè)開發(fā)項(xiàng)目。 Git 仍然相對(duì)較新,仍然處于不斷開發(fā)中。其他腳本和工具正在實(shí)現(xiàn)用來(lái)簡(jiǎn)化 Git 的使用;請(qǐng)參看 參考資料 中給出的例子。



參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)
  • 下載 Git 源代碼。

  • QGit 是一個(gè)基于 QT 的 Git GUI。

  • 訂購(gòu)免費(fèi)的 SEK for Linux,這有兩張 DVD,包括最新的 IBM for Linux 的試用軟件,包括 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere?。

  • 在您的下一個(gè)開發(fā)項(xiàng)目中采用 IBM 試用軟件,這可以從 developerWorks 上直接下載。


討論


關(guān)于作者

 

Eli Dow 是位于紐約 Poughkeepsie 的 IBM Linux Test and Integration Center 的軟件工程師。他取得了 Clarkson 大學(xué)計(jì)算機(jī)科學(xué)與心理學(xué)的學(xué)士學(xué)位和計(jì)算機(jī)科學(xué)碩士學(xué)位。他的興趣包括 GNOME 桌面、人機(jī)交互和 Linux 系統(tǒng)編程。他是 IBM 紅皮書 Linux for IBM System z9 and IBM zSeries 的作者之一。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多