您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

利用 Git 办理源代码

发布日期:2011-05-07


    Git 是 Linux Torvalds 为了资助办理 Linux® 内核开辟而开辟的一个开放源码的版本控制软件。我们可以本身下载这个软件用于对内核的 hack 阐发,大概用来办理本身的软件开辟项目。本文将向您展示怎样利用 Git 东西开始阐发 Linux 。 
    在当代软件开辟项目中,要成为一个有效的软件开辟职员,我们必须可以大概与其他项目孝敬者并行举行开辟。源代码办理(SCM)体系不是什么新头脑。为了编写一些可以大概更快速、大抵地开辟以后软件项目标软件,已经举行了很多实行。最新的源代码办理方案都包括了版本控制体系,它可以对源代码的修改革行回滚,从而将有害的代码剔除出项目之外,大概大抵地跟踪哪些人修改了代码的哪些行的内容。版本控制体系试图办理开辟职员在试图同时对某个文件举行修改时所出现的辩论标题,可以保卫用户包围其他人所作的修改。源代码办理利用的很多盛行办理方案都试图办理已往 SCM 办理方案中的失效标题。 

    会合化的版本控制体系通常采取两种要领: 

    有些提供了文件锁来保卫多个用户的并行访问。这些体系对文件举行加锁,如许在某个时间只有一个开辟职员对中间堆栈具有写入权限。
别的一些东西,比喻 CVS,允很多个开辟职员同时对雷同的文件举行编辑,并提供了一些机制稍后归并这些修改。
盛行的版本控制体系包括: 
    CVS 
    Subversion 
    Arch 
    Bazaar 
    BitKeeper 
    什么是 Git? 

    非常大抵地说,Git 是 Linus Torvalds 近来实现的源代码办理软件。正如所提供的文档中说的一样,“Git 是一个快速、可扩展的散布式版本控制体系,它具有极为丰富的下令集,对内部体系提供了高级利用和完全访问。” 

    Torvalds 开始动手开辟 Git 是为了作为一种过渡方案来调换 BitKeeper,后者之前不绝是 Linux 内核开辟职员在环球利用的紧张源代码东西。开放源码社区中的有些人以为 BitKeeper 的容许证并不得当开放源码社区的变乱,因此 Torvalds 决定动手研究容许证更为机动的版本控制体系。只管最初 Git 的开辟是为了资助 Linux 内核开辟的进程,但是我们已经发明在很多其他自由软件项目中也利用了 Git。比喻,X.org 近来就迁徙到 Git 上来了,很多 Freedesktop.org 的项目也迁徙到了 Git 上。 

    Git 如今紧张由探求 CVS 或专有代码办理办理方案调换物的软件开辟职员所利用。Git 与 CVS 有很多区别: 
    分支更快、更容易。 
    支持不在线变乱;本地提交可以稍后提交到办事器上。 
    Git 提交都是原子的,且是整个项目范畴的,而不像 CVS 中一样是对每个文件的。 
    Git 中的每个变乱树都包括一个具有完备项目汗青的堆栈。 
    没有哪一个 Git 堆栈会天生比其他堆栈更告急。 

    摆设 

    要摆设当前版本的 Git,我们可以利用提供商在 Linux 发行版中提供的包,大概从最新的稳固快照开始手工举行编译。我提倡下载包括最新 Git 源代码稳固快照的 tarball;克制到撰写本文时这个版本是 v1.4.0。我们可以在下面的 参考数据 一节中找到链接。 

    有了这个 tarball 之后,请确保初始摆设所依赖的包都已经摆设了。体系中必须包括以下包,以及相应的开辟头文件: 

    zlib 
    libcurl 
    libcrypto(OpenSSL) 
    rsync(2.6.0 或更高版本) 
    这些条件餍足之后,我们就可以开始编译初始的 Git 摆设体系了。这个进程敷衍大部分不绝利用 Linux 的开辟职员来说应该非常熟习了。起首利用映射下载的包格局的下令将包展开: 

    $ tar -jxvf git-1.4.0.tar.bz2 


    或 

    $ tar -zxvf git-1.4.0.tar.gz 

    然后切换到得当的目次中,并实行 make 下令。(过细目次名取决于我们下载的快照的日期。) 

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

    您会被提示输入 sudo 暗码才华连续摆设。如今就已经准备好利用 Git 东西了。 

    得到最新的内核源代码树 

    在利用 Git 办理源代码堆栈时,我们可以利用两种要领开始我们的变乱。我们可以利用现有代码的一个本地目次,然后从中天生一个堆栈;也可以映射其他人颁发的堆栈。 

    敷衍本文的目标来说,我们将得到 Torvalds 颁发的 Git 堆栈的一个镜像。下面的下令将创建一个名为 linux-2.6 的 Git 堆栈。这个目次包括了一个潜伏目次 .git/ 。 
    
    $ git-clone \ 
    git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \ 
    linux-2.6 

    这个步调会实行很永劫间,由于 Git 正在将内核源代码(这有数百兆大)从 kernel.org 传输到本地呆板上。输出结果大概有些晦涩难懂,但是要是您有一个快速的 Internet 链接,卷屏的速率应该相称快。输出结果应该雷同于图 1 所示。 

    图 1. 在下载内核源代码树进程中孕育孕育产生的输出
[ 干系贴图 ]

    如今切换到包括新下载的内核的目次中: 

    $ cd linux-2.6 

    如今,我们应该在本地呆板上有一个可以变乱的 Linux 2.6 堆栈了!此时我们就可以对这个堆栈举行一些底子的利用了。 

    更新本地 Git 堆栈 

    在利用 Git 时,我们通常可以假设本身的堆栈大概比 kernel.org 的堆栈有些滞后。因此我们通常都是起首将本身的堆栈更新成最新的上游内核树。这个进程偶然偶尔称为快速归并(fast-forward merge)。严格来说,我们如今并不须要实行这个进程,由于我们方才摆设了本身的堆栈,它应该还没有逾期。但是查抄一下终究没有弊端:

$ cd linux-2.6
$ git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
... 
    要是告成,我们就应该会看到雷同于下面的输出结果: 

    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. 
    $> 

    要是我们的堆栈不是最新的,就会看到有些内容通过网络传输到本地呆板上了。 

    从堆栈中导出文件 

    我们须要将文件从 Git 堆栈(潜伏目次中的那些文件)中导出到变乱目次中才华开始本身的 hack 进程。下面的下令会在当前目次中写入没有潜伏的目次,此中包括了 Linux 的源代码: 

    $ git-checkout 

    要是您渴望包围本地修改,可以利用 -f 选项导出文件,如许就可以将您带回到一个干净的状态: 

    $ git-checkout -f 

    如今在当前变乱目次中,我们应该就可以看到熟习的 Linux 源代码目次布局了,然后我们可以对这些源代码恣意举行修改。 

    修改现有文件 

    我们如今可以修改所选择的恣意文件。举一个大抵的例子来说,我们将修改 docs 目次中的一些内容:添加一条以后可以很容易辨认的信息。为了让我的例子更容易试验,我没有选择修改源代码;不过只要您渴望,欢迎连续重写整个内核的子体系。 

    起首,让我们在编辑器中打开一个文件: 

    $ vi ./document.tion/ManagementStyle 

    显然,我利用的是 vi;不过您固然可以利用本身喜好的恣意编辑器来完成这项变乱。在编辑文件时,我在第一段前面添加了一行:“Eli shall be in charge of managing sandwich consumption. See document.tion/Sandwiches for more.” 

    要是您对本身所做的修改非常得意,并且以为本身已经准备好将其作为堆栈的一个永世部分了,就须要利用下面的下令导入您的修改: 

    $ git-commit document.tion/ManagementStyle 

    您会被提示说恳求提供一个提交消息,它是一个用户天生的表明,用来资助其他开辟职员(也大概是您本身以后)明白刚才的实现到底举行了哪些修改。在我们的例子中,提交消息是一个形貌刚才对文档所做修改的短句。 

    要是您渴望查抄一下到如今为止变乱的状态,可以实行 git-log 来查察本地堆栈的汗青(它承继了所克隆的堆栈的信息)。您的提交消息应该在日记的最上面。 

    添加或删除文件 

    但是请等一下!我们还没有添加 document.tion/Sandwiches 文件呢,因此我们须要将其添加到变乱目次中,并报告 Git 何时这个文件已经准备好了。我利用 echo 下令创建了想要添加的文件,由于这只是一个大抵的例子罢了。同样,您也可以利用本身喜好的东西。 

    $ echo "Turkey is superior" > document.tion/Sandwiches 

    如今我们已经添加了一个文件,接下来须要将这个文件添加到 Git 中,从而让 Git 相识这种变革,然后才华提交这个版本。我们可以通过实行下面的下令来完成这些任务: 

    $ git-add document.tion/Sandwiches 
    $ git-commit document.tion/Sandwiches 

    要是您添加了多个文件,可以在同一行中的 git-add 下令反面列出这些文件,不过您也不必一次将它们全部添加到堆栈中去。要是要删除某个文件,并且没有 git-add 之类的分外下令;您只须要删除这个文件,然后提交就可以了。 

    如今应该查察一下 git-log,从而确保到如今为止所做的变乱都是正确的。这一次,我们将利用 -p 选项来以单独的补丁格局查察日记。 

    $git-log -p 

    创建 diff 文件 

    着末,我们渴望天生一个包括您修改后的文件和原文件之间区别的文本文件。这个文件通常是利用 diff 东西创建的,因此就称为 diff 文件。diff 可以资助我们创建补丁文件(patch file),后者是我们向很多开放源码软件项目发送代码提交时通常利用的要领。有关 diff 的更多内容,请参看下面 参考数据 部分中有关 Kernel.org 的链接。 

    Git 还可以干什么? 

    我们可以利用 Git 来办理本地堆栈,而不消镜像其他人的变乱。比喻,要是我们喜好利用 Git 来办理本身个人私家私家对某个开放源码项目孝敬的文件,就可以从项目快照中天生一个 Git 堆栈。 

    假设我们已经有了一个名为 release.tar.gz 的标准 release tarball,可以实行下面的下令来创建一个本地的 Git 堆栈: 
    $ tar -zxvf release.tar.gz 
    $ cd release 
    $ git init-db 

    我们可以看到消息说 Git 是 “默认于本地存储地区的”。这些消息都是正常的,阐发我们有一个 Git 堆栈。 

    如今我们已经对变乱目次举行了初始化,接下来在项目目次中应该会看到一个新目次 .git。为了报告 Git 我们渴望对这个项目中的每个文件都举行跟踪,请实行下面的下令: 

    $ git add . 

    着末,利用下面的下令将所监督的文件提交到堆栈中: 

    $ git commit -a 

    同样,体系会提示我们输入提交消息。从如今开始,我们就可以在本身的 Git 堆栈中利用 Git 所提供的完备结果了,比喻对实行特性举行分支,为了追踪回归测试标题而将代码一分为二,并利用常见的版本汗青结果。 

    有关 Git 的分支办理和其他风趣特性的更多信息,请参看 Kernel.org 上给出的 Git 的精良教程(拜见 参考数据 中的链接)。 

    结束语 

    如今我们已经知道怎样利用 Git 来获取 Linux 内核源代码和其他 Git 办理的项目了,接下来可以选择利用 Git 来办理下一个开辟项目。 Git 仍旧相对较新,仍旧处于不绝开辟中。其他脚本和东西正在实现用来简化 Git 的利用;请参看 参考数据 中给出的例子。 
    参考数据 

    学习 

    您可以参阅本文在 developerWorks 环球站点上的 英文原文 。 
    Kernel.org 上有很多很好的入门资源: 
    A tutorial introduction to Git 
    Git for CVS users 
    Everyday Git with 20 commands or so 

    Kernel Hackers' Guide to git 是一份开始入门的参考数据。 
    学习更多有关版本控制体系的知识: 
    “开辟者和喜好者的 CVS”(developerWorks,2001 年 3 月) 
    “Subversion 简介:三千年版本控制”(developerWorks,2006 年 6 月) 
    “StatCVS 提供了对 CVS 生存库活动的深入观察”(developerWorks,2005 年 2 月) 
    Linux for IBM System z9 and IBM zSeries 是有关 Linux 在大型机体系上的 IBM 红皮书。 

    在 developerWorks Linux 专区 可以找到为 Linux 开辟职员准备的更多资源。 
    随时存眷 developerWorks 技能变乱和网络广播。 
    得到产品和技能 
    下载 Git 源代码。 

    QGit 是一个基于 QT 的 Git GUI。 

    订购免费的 SEK for Linux,这有两张 DVD,包括最新的 IBM for Linux 的试用软件,包括 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere®。 
    在您的下一个开辟项目中采取 IBM 试用软件,这可以从 developerWorks 上直接下载。 
    讨论 
    通过参加 developerWorks blogs 参加 developerWorks 社区。