Git — The stupid content tracker, 傻瓜内容跟踪器。Linus 是这样给我们介绍 Git 的。

  Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

  实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发,例如:wine, U-boot 等。

  说明:

  此书介绍的内容要深入许多,尤其是对多人合作和分布式项目管理的讨论,在学习了Git的一系列命令之后,如何才能有效的使用它们管理项目、与他人合作?《Pro Git》专门在第五章里讨论了这些问题。这样就不用自己去摸索了。

  本章介绍开始使用 Git 前的相关知识。我们会先了解一些版本控制工具的历史背景,然后试着在你的系统上把 Git 跑起来,直到最后配置好,可以开始正常的开发工作。读完本章,你就会理解为什么 Git 会如此流行,为什么你真的需要使用它。

《Pro Git》中文版 PDF 下载地址:

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2013年资料/5月/29日/《Pro Git》中文版 PDF

或者百度网盘下载:http://pan.baidu.com/share/link?shareid=590883&uk=487907638

附上书中一些tips:

为什么要用GIT

  • 更顺畅的工作流程,开发过程中,完全可以离线操作
  • 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换
  • 弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令
  • 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净
  • 内容按元数据方式存储,所有的版本信息都位于.git目录下
  • 完整性好,更易于协作开发
  • 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库

GIT安装与配置

安装

1.从源码安装

在安装之前,你必须保证以下几个依赖包已经安装在你的系统上:curl, zlib, openssl, expat, libiconv。如果你的系统是Ubuntu,你可以这样安装:

apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

当所有的依赖项已经解决,就可以从http://git-scm.com/download上下载Git的源码,然后编译安装,具体命令如下:

tar -zxf git-1.*.*.*.tar.gz

cd git-1.*.*

make prefix=/usr/local all

sudo make prefix=/usr/local install

2.在Linux上安装

如果你的系统是Linux或者Fedora,你可以通过以下命令直接安装Git:

yum install git-core (fedora)

apt-get install git-core (ubuntu)

3.在Windows上安装

尽管Git是发源于Linux,但现在Windows上也有能够正常使用Git,只不过不支持中文,在Windows下所有的中文都显示问号,另外还有一些功能上的BUG。所以建议还是在Linux上去使用Git,如果你不得不工作在Windows上,你可以到http://msysgit.github.com/上下载msysgit的最新版,安装过程和其他Windows程序差不多,基本上点下一步就OK了。Msysgit默认会安装git bash和git GUI这两个程序,一般用git bash就可以了,它支持常用的命令。如果对Linux命令行不熟,你也可以用用git GUI,但功能有限制。

 第一次使用GIT

在你安装好Git之后,你需要修改一些配置,才能正常使用Git。

Git通过“git config”命令来配置Git,这个命令有2个选项:--system, --global, 加上默认选项,分别对应Git上3级配置文件。第一个是/etc/gitconfig文件,和--system对应,这是全局配置文件,修改这个文件,将会影响系统上所有的用户,所有的仓库。第二个是你家目录下的/.gitconfig文件,与--global对应,修改它会对你当前用户的所有仓库产生影响。第三个是你仓库中的.git/.gitconfig文件,这是“git config”默认修改的配置文件,它只会对你当前仓库产生影响。

在第一次使用Git时,你需要告诉你的协同开发者,你是谁以及你的邮箱,在你提交的时候,Git需要这两个信息。具体通过以下命令设置:

git config --global user.name “Test OSS”

git config --global user.email oss.lzu.edu.cn@gmail.com

当然你也可以不用--global选项,但这意味这你在每一个仓库中都要这样设置。

同时,你也可以指定你的编辑器,你的Diff工具:

git config --global core.editor vim

git config --global merge.tool vimdiff

你还可以通过”git config --list”命令来查看你的设置。

当你把Git设置好之后,如果你要和从Git服务器上获得仓库,或者向Git服务器提交你的代码(比如github),你可能需要生成你自己的ssh密钥对。Git支持4种与服务器端通信的协议:git、http、ssh和https。其中git只是一个只读协议,也就是说你只可以从服务器端获取仓库,但是你不能提交你自己的代码。而http和https用的很少,大部分都只支持ssh协议和Git协议。

当你通过ssh协议与远端服务器进行通信的时候,你可以通过以下命令生成ssh密钥对:

ssh-keygen -t rsa

如果你没有指定密钥名称和存放路径的话,它默认把两个不对称密钥放在你的家目录下的.ssh目录下,密钥文件默认名称为id_rsa和id_rsa.pub,前者是私钥,后者是公钥。中间可能会要你设定访问密钥密码,这个可以设,可以不设,但为了安全考虑,还是建议你设一个访问密码。否则,意味着任何持有你密钥的人都可以使用该密钥。

然后把你的公钥发给Git仓库管理员,然后你就可以通过ssh协议来访问服务器端,期间程序会自动进行密钥对匹配,如果你设了访问密码,你可能需要输入密码。

更多关于ssh的内容,请访问这里:http://www.freebsd.org/doc/zh_CN/books/handbook/openssh.html

这些设定完之后,你可以通过获得任何一个公开的代码仓库来检测你的git是否工作正常。比如下面这个:

git clone git://git2.kernel.org/pub/scm/git/git.git

GIT仓库

Git做为一个资源管理和跟踪系统,如果想要把自己的文件托管在Git上,那么首先你得让Git知道你需要管理的文件在哪。比如说现在我有一个项目,它在test文件夹里,我想让Git管理这个项目,这个时候你需进入到这个目录,然后运行“git init”命令。这个时候Git就会在该目录下生成一个.git的隐藏目录,Git用来进行版本控制和内容跟踪的所有文件都在该文件夹下。

处于git跟踪下的文件只具有三种状态:

  • Modified(working directory):被修改过的文件
  • Staged(staging area):通过git add添加到暂存区域的文件
  • Committed(git directory):通过git commit提交到仓库的文件

所以,一般的git工作流程可能是这样:修改过某些文件,然后把这些文件添加都暂缓区,再提交到仓库中形成一个版本或快照,最后提交到git服务器上。而在中间,可能伴随着分支管理,分支切换,撤消与合并。

可能有些人会觉得很奇怪,为什么git会有暂存区域这个概念,直接提交到仓库中不就ok了。其实这是git为了做版本控制用的,试想如果没有暂存区域,每修改一个文件,就会形成一个版本,太过频繁,不易于管理。暂存区域其实就是下一个版本的文件清单,你可以自由控制该往仓库中提交什么文件,这也可以避免在一个版本中包含一些中间文件,比如编译后的文件。

Pro Git CN Plus的更多相关文章

  1. 【Tools】Pro Git 一二章读书笔记

    记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧.   Pro Git (Scott Chacon) 读书笔记:   ...

  2. [Git00] Pro Git 一二章读书笔记

    记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧.   Pro Git (Scott Chacon) 读书笔记:   ...

  3. Pro Git 学习笔记

    Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...

  4. Pro Git 第一章 起步 读书笔记

    Pro Git 笔记 第1章 起步 1.文件的三种状态. 已提交:文件已经保存在本地数据库中了.(commit) 已修改:修改了某个文件,但还没有提交保存.(vim) 已暂存:已经把已修改的文件放在下 ...

  5. 《Pro Git》阅读随想

    之前做版本管理,我使用最多的是SVN,而且也只是在用一些最常用的操作.最近公司里很多项目都开始上Git,借这个机会,我计划好好学习一下Git的操作和原理,以及蕴含在其中的设计思想.同事推荐了一本< ...

  6. Pro Git(中文版)

    Pro Git(中文版) 返回 Git @ OSC 目录 1.起步 1.1 关于版本控制 1.2 Git 简史 1.3 Git 基础 1.4 安装 Git 1.5 初次运行 Git 前的配置 1.6 ...

  7. 《Pro Git》笔记3:分支基本操作

    <Pro Git>笔记3:Git分支基本操作 分支使多线开发和合并非常容易.Git的分支就是一个指向提交对象的可变指针,极其轻量.Git的默认分支为master. 1.Git数据存储结构和 ...

  8. 《Pro git》

    可以通过阅读 CODING 工程师参与翻译的 <Pro Git> 进一步掌握 Git 版本控制系统. https://git-scm.com/book/zh/v2

  9. 《Pro Git》轻松学习版本控制

    转自 https://kindlefere.com/post/333.html 什么是“版本控制”?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.在 ...

随机推荐

  1. *CCF 201612-2 工资计算(80)

    试题编号:201612-2 试题名称:工资计算 时间限制:1.0s 内存限制:256.0MB 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资 ...

  2. 笔记整理——C语言-http-1

    http 传输原理及格式 - friping - ITeye技术网站 - Google Chrome (2013/4/1 14:02:36) http 传输原理及格式 博客分类: 其他 应用服务器浏览 ...

  3. C#子窗口与父窗口交互(使用委托和事件)

    目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上. 方法:有很多方法,这里只介绍委托和事件的实现方式. 思路:Form2中定义事件,Form1创建Form ...

  4. iOS 之 关闭键盘

    //方法一:关闭整个系统的键盘 [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; //方法二:关闭当前页的键盘 [[sel ...

  5. iOS 之 定时器

    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(showMyDrivingRangeTimer) ...

  6. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  7. js原生设计模式——2面向对象编程之js原生的链式调用

    技巧点:对象方法中返回当前对象就可以链式调用了,即方法中写return this; <!DOCTYPE html><html lang="en"><h ...

  8. 天兔(Lepus)监控操作系统(OS)安装配置

    监控和被监控端都要安装和配置snmp: [root@HE1bin]# yum install net-snmp* [root@HE1bin]# vi /etc/snmp/snmpd.conf 41行将 ...

  9. JSP EL表达式使用

    JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMa ...

  10. 关于ClassLoader

    http://blog.csdn.net/zztp01/article/details/6409355 http://blog.sina.com.cn/s/blog_6ec6be0e01011xof. ...