什么是 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 ./Documentation/ManagementStyle
显 然,我使用的是 vi;不过您当然可以使用自己喜欢的任何编辑器来完成这项工作。在编辑文件时,我在第一段前面添加了一行:“Eli shall be in charge of managing sandwich consumption. See Documentation/Sandwiches for more.”
如果您对自己所做的修改非常满意,并且觉得自己已经准备好将其作为仓库的一个永久部分了,就需要使用下面的命令导入您的修改:
$ git-commit Documentation/ManagementStyle
您会被提示说要求提供一个提交消息,它是一个用户生成的注释,用来帮助其他开发人员(也可能是您自己以后)理解刚才的实现到底进行了哪些修改。在我们的例子中,提交消息是一个描述刚才对文档所做修改的短句。
如果您希望检查一下到目前为止工作的状态,可以执行 git-log
来查看本地仓库的历史(它继承了所克隆的仓库的信息)。您的提交消息应该在日志的最上面。
添加或删除文件
但是请等一下!我们还没有添加 Documentation/Sandwiches 文件呢,因此我们需要将其添加到工作目录中,并告诉 Git 何时这个文件已经准备好了。我使用 echo
命令创建了想要添加的文件,因为这只是一个简单的例子而已。同样,您也可以使用自己喜欢的工具。
$ echo "Turkey is superior" > Documentation/Sandwiches
现在我们已经添加了一个文件,接下来需要将这个文件添加到 Git 中,从而让 Git 了解这种变化,然后才能提交这个版本。我们可以通过执行下面的命令来完成这些任务:
$ git-add Documentation/Sandwiches
$ git-commit Documentation/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 管理源代码(转)的更多相关文章
-
用git管理源代码
自从做iOS开发的一年多以来,之前一直都是用svn进行代码管理.因为工作需要,我也开始用git管理源代码.关于git的基本使用,在此做一个详细的介绍,希望能对初次接触git的人有所帮助! 本篇博客针对 ...
-
使用 Git 管理源代码
在现代软件开发项目中,要成为一个有效的软件开发人员,我们必须能够与其他项目贡献者并行进行开发.源代码管理(SCM)系统不是什么新思想.为了编写一些能够更快速.简单地开发以后软件项目的软件,已经进行了很 ...
-
在Visual Studio 中使用git——使用git管理源代码(三)
在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 第三部分:使用git管理源代码 ...
-
使用git管理源代码
之前用U盘管理自己的demo很不方便.然后发现网上有个git的网站可以管理源代码 这里只是记录简单使用 注:这不是教程 本人之前也是参考这2篇文章http://blog.jobbole.com/7 ...
-
在VS2010中使用Git管理源代码
前文我们讲了使用TortoiseGit管理源代码,但是对于使用VS2010的朋友来说,源代码管理起来还是不怎么方便.要是直接在VS2010中能使用Git就好了,下面我们就来看看怎么在VS2010中使用 ...
-
visual studio2015使用git管理源代码
1.注册https://git.oschina.net/ 2.注册好后,创建一个测试项目,如下图: 点击创建,如下: 上面的红框中的地址下面会用到. 3.git初始化设置 在本地电脑要安装git,打开 ...
-
Git管理源代码
Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git单人本地仓库操作 安装git sudo apt-g ...
-
使用git进行源代码管理
git是一款非常流行的分布式版本控制系统,使用Local Repository追踪代码的修改,通过Push和Pull操作,将代码changes提交到Remote Repository,或从Remote ...
-
基于git的源代码管理模型——git flow
基于git的源代码管理模型--git flow A successful Git branching model
随机推荐
-
ASP.NET MVC在线人数统计
在Global.asax.cs文件中代码: protected void Application_Start() { Application[; AreaRegistration.RegisterAl ...
-
cannot start session without errors
访问phpmyadmin出现如标题错误,解决方案如下: cd /var/lib/php 更改目录权限chown nginx:nginx -R session/ That's All!
-
接收 ajax POST 方式传入的参数
----前台--- var list = new Array(); var params = { gencodeid : "test001", value : "01&q ...
-
SDK Build Tools revision (19.0.3) is too low for project Min
SDK Build Tools revision (19.0.3) is too low for project Min(转) 如果你正在使用Android Studio工具进行开发,且将 ...
-
thinkphp nginx 配置
thinkphp convention配置:'URL_MODEL' => '2', //URL模式 nginx rewrite配置: if (!-e $request_filename) { r ...
-
js动态判断密码强度&;&;实用的 jQuery 代码片段
// 网上拷贝的代码,效果不太好需要自己调整<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
-
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x ...
-
Windows台cocos2d-x 3.2下载一个新的项目,创造的过程
首先,左右cocos2d-x于windows下一个Android建筑环境, 引用一个网友这个博客<cocos2d-x 3.0rc开发指南:Windows下Android环境搭建>. 这里简 ...
-
【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
作者:Williammao, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/290.h ...
-
.Net程序员学用Oracle系列(29):PLSQL 之批量应用和系统包
1.批量数据操作 1.1.批量生成数据 1.2.批量插入数据 2.批量生成脚本 3.生成数据字典 4.常见系统包 4.1.DBMS_OUTPUT 4.2.DBMS_RANDOM 4.3.其它系统包及常 ...