编辑: qksr | 2012-12-12 |
2007 年8月前言 Git 堪称版本控制瑞士军刀.
这个可靠、多才多艺、用途多样的校订工具异常灵活,以致不易掌 握,更别说精通了. 正如 Arthur C. Clarke 所说,足够先进的技术与魔法无二.这是学习 Git 的好办法:新手不 妨忽略 Git 的内部机理,只当小把戏玩,借助 Git 其奇妙的能力,逗逗朋友,气气敌人. 为了不陷入细节,我们对特定功能提供大面上的讲解.在反复应用之后,慢慢地你会理解每个小技 巧如何工作,以及如何组合这些技巧以满足你的需求. ? 简体中文: 俊杰,萌和江薇.正体中文 由+cconv -f UTF8-CN -t UTF8-TW + 转换. ? 法文: Alexandre Garel.也在 itaapy. ? 德文: Benjamin Bellee 和Armin Stebich;
也在 Armin 的网站. ? 葡萄牙文: Leonardo Siqueira Rodrigues [ODT 版]. ? 俄文: Tikhon Tarnavsky, Mikhail Dymskov, 和其他人. ? 西班牙: Rodrigo Toledo 和Ariset Llerena Tapia. ? 越南文: Tr?n Ng?c Qu?n;
也在 他的网站. ? 单一文件: 纯HTML,无CSS. ? PDF 文件: 打印效果好. ? Debian 包,Ubuntu 包: 本站快速本地拷贝.如果 下线了会方便些. ? 纸质书 [Amazon.com]:
64 页, 15.24cm x 22.86cm, 黑白.没有电子设备的时候会 方便些. 致谢! 那么多人对本文档的翻译让我受宠若惊.他们的付出拓宽了读者群,我非常感激.
1 Dustin Sallings、 Alberto Bertogli、 James Cameron、 Douglas Livingstone、 Michael Budde、 Richard Albury、 Tarmigan、 Derek Mahar、 Frode Aannevik、 Keith Rarick、 Andy Somerville、 Ralf Recker、 ?yvind A. Holm、 Miklos Vajna、 Sébastien Hinderer、 Thomas Miedema、Joe Malin、和Tyler Breisacher 对本文档正确性和优化做出了贡献. Fran?ois Marier 维护 Debian 包,该Debian 包起初由 Daniel Baumann 创建. 感谢其他很多提供帮助和鼓励的人.名单太长了我无法一一写下. 如果我不小心把你的名字落下,请告诉我或者发一个补丁. ? http://repo.or.cz/ 为自由项目提供服务.第一个 Git 服务器.由最早的 Git 开发人 员创建和维护. ? http://gitorious.org/ 是另一个 Git 服务站点,为开源项目提供服务. ? http://github.com/ 开源项目免费,私有项目收钱. 感谢以上站点为本文档提供伺服服务. 许可 本指南在GNU 通用公共许可协议版本
3 之下发布.很自然,源码保存在一个 Git 仓库里,可 以通过以下命令获得源码: $ git clone git://repo.or.cz/gitmagic.git # 创建 gitmagic 目录.或从以下镜像得到: $ git clone git://github.com/blynn/gitmagic.git $ git clone git://gitorious.org/gitmagic/mainline.git 入门 我将用类比的方式来介绍版本控制的概念.更严谨的解释参见 维基百科版本修订控制条目. 工作是玩 我从小就玩电脑游戏,直到今天;
不过我只是在长大后才开始使用版本控制系统.我想我并不是个 例,所以拿两者工作方式进行类比,可使一些概念更易解释,也易于理解. 编写代码,或编辑文档,和玩游戏差不多.在你做出了很多进展之后,你最好保存一下.要做到这 点,点击你所信任的编辑器保存按钮就好了. 但这将覆盖老版本.就像那些学校里玩的老游戏,只有一个存档:你确实可以保存,但你不能回到 更老的状态了.这真让人扫兴,因为那个状态可能恰好保存了这个游戏特别有意思一关,说不定哪 天你想再玩一下呢.或者更糟糕的,你当前的保存是个必败局,这样你就不得不从头开始玩了.
2 版本控制 在编辑的时候,如果想保留旧版本,你可以将文件 另存为 一个不同的文件,或在保存之前将文 件拷贝到别处.你可能会压缩这些文件以节省空间.这是一个初级的依赖手工进行的版本控制方 式.游戏软件在这块早就做了很多提高,很多游戏都提供基于时间戳的多个存档槽. 让我们看看稍稍复杂的情况.比如你有很多放在一起的文件,比如项目源码,或网站文件.现在如 你想保留旧版本,你不得不把整个目录存档.手工保存多个版本很不方便,而且很快会耗费巨大. 在一些电脑游戏里,一个存档真的包含在一个充满文件的目录里.这些游戏为玩家屏蔽了这些细 节,并提供一个方便易用的界面来管理该目录的不同版本. 版本控制系统也没有不同.两者提供友好的用户界面,来管理目录里的东西.你可以频繁保存,也 可以之后加载任一存档.不像大多数计算机游戏,版本控制系统通常精于节省存储空间.一般情况 下,如果两个版本间只有少数文件的变更,每个文件的变更也不大,那就只存储差异的部分,而不 是把全部拷贝的都保存下来,以节省存储空间. 分布控制 现在设想一个很难的游戏.太难打了,以至于世界各地很多骨灰级玩家决定组队,分享他们游戏存 档以攻克它.Speedrun 就是现实中的例子:在同一个游戏里,玩家们分别攻克不同的等级,协 同工作以创造惊人战绩. 你如何搭建一个系统,使得他们易于得到彼此的存档?并易于上载新的存档? 在过去,每个项目都使用中心式版本控制.某个服务器上放所有保存的游戏记录.其他人就不用再 做备份了.每个玩家在他们机器上最多保留几个游戏记录.当一个玩家想更新至最新进度时候,他 们需要把这个进度从主服务器下载下来,玩一会儿,保存并上载到主服务器以供其他人使用. 假如一个玩家由于某种原因,想得到一个较旧版本的游戏进度该怎么办?或许当前保存的游戏是一 个注定的败局,因为某人在第三级忘记捡某个物品;