设为首页 收藏本站
查看: 1266|回复: 1

[经验分享] Git权威指南

[复制链接]

尚未签到

发表于 2018-9-18 13:03:58 | 显示全部楼层 |阅读模式

  • MoinMoin 是我们关注的一个开源的维基软件,2006 年,它的代码库从SVN迁移到了Hg。
  • Mailman 同样是我们关注的一个开源邮件列表软件。2007 年,它的代码库从SVN迁移到了 Bazaar。
  • Linux 采用Git作为版本控制系统(一点都不奇怪,因为Git就是 Linus Torvalds 开发的)。
  • Android 是目前最为流行的开源项目之一,因为潜在市场巨大,已经吸引了越来越多的开发者进入这个市场,而Android就是用Git维护的。
  当开源软件纷纷倒向分布式版本控制系统大旗(尤其是Git)的时候,很多商业公司也在行动了,尤其是涉及异地团队协同和Android核心代码定制 开发的公司。对于那些因保守而不敢向Git靠拢的公司,Git也可以派上用场,因为Git可以与现在大多数公司部署的SVN很好地协同,即公司的服务器是  SVN,开发者的客户端则使用 Git。相信随着Git的普及,以及公司在代码管理观念上的改进,会有更多的公司拥抱 Git。
本书的组织
  本书共分为9篇,前8篇是正文,一共41章,第9篇是附录。
  第1篇讲解了Git的相关概念,以及安装和配置的方法,共3章。第1章介绍了版本控制的历史。第2章用十几个小例子介绍了Git的一些闪亮特性,期 待这些特性能够让你爱上Git。第3章则介绍了Git在三种主要操作系统平台上的安装和使用。在本书的写作过程中,我70%的时间使用的是Debian  Linux操作系统,Linux用户可以毫无障碍地完成本书列举的所有实践操作。在2010年年底,当得知有出版社愿意出版这本书后,我向妻子阿巧预支了 未来的部分稿费购买了我的第一台 MacBook Pro,于是本书就有了较为翔实的如何在Mac OS  X下安装和使用Git的内容,以及在本书第22章中介绍的关于Topgit在Mac OS  X上的部署和改进相关的内容。在本书的编辑和校对过程中因为要使用 Word 格式的文稿,所以本书后期的很多工作是在运行于 VirtualBox  下的 Windows 虚拟机中完成的,即使是使用运行于资源受限的虚拟机中的 Cygwin,Git 依然完美地完成了工作。
  第2篇和第3篇详细讲解了Git的使用方法,是本书的基础和核心,大约占据了全书40%的篇幅。这两篇的内容架构方式是我在进行SVN培训时就已经 形成的习惯,即以“独奏”指代一个人的版本控制所要讲述的知识点,以“和声”指代团队版本控制涉及的话题。在第2篇“Git独奏”中,本书将Git的设计 原理穿插在各章之中讲解,因为唯有了解真相(Git原理),才有可能自由(掌握Git)。在第3篇“Git和声”中,本书讲解了团队版本控制必须掌握的里 程碑和分支等概念,以及如何解决合并中遇到的冲突。
  第4篇细致地讲解了Git在实际工作中的使用模式。除了传统的集中式和分布式使用模式之外,第22章还介绍了 Topgit  在定制开发中的应用,这也是我公司在使用Git时采用的最主要的模式。这一章还讲解了我对 Topgit  所做的部分改进,相关的具体介绍最早出现在我公司的博客上①。第23~25章介绍了多版本库协同的不同方法,其中第25章介绍的一个独辟蹊径的解决方案是 由 Android  项目引入的名为repo的工具实现的,我对其进行改造后可以让这个工具脱离Gerrit代码审核服务器,直接操作Git服务器。第26章介绍了git- svn这一工具,该工具不但可以实现从SVN版本库到Git版本库的迁移,还可以实现以Git作为客户端向SVN提交。
  第5篇介绍了Git服务器的架设。本篇是全书最早开始撰写的部分,这是因为我给客户做的Git培训讲义的相关内容不够详细,于是应客户要求针对 Gitolite等服务器的架设撰写了详细的管理员手册,即本书的第30章。第32章介绍了Android项目在Git管理上的又一大创造,即 Gerrit,它实现了一个独特的集中式Git版本库管理模型。
  第6篇讲解了Git版本库的迁移。其中第34章详细介绍了从CVS版本库到Git版本库的迁移,其迁移过程也可以作为从CVS到SVN迁移的借鉴。 本篇还介绍了从SVN和Hg版本库到Git的迁移。对于其他类型的版本库,介绍了一个通用的需要编程来实现的方法。在本篇的最后还介绍了一个Git版本库 整理的利器,可以理解为一个Git库转换为另外一个Git库的方法。
  第7篇是关于Git的其他应用,其主要内容介绍了我在etckeeper启发下开发的一款备份工具 Gistore,该工具可以运行于Linux和Mac OS X下。
  第8篇是Git杂谈。其中第40章的内容可供跨平台的项目组借鉴。第41章介绍了一些在前面没有涉及的Git的相关功能和特性。
  第9篇是附录。首先介绍了完整的Git命令索引,然后分别介绍了CVS、SVN、Hg与Git之间的比较和命令对照,对于有其他版本控制系统使用经验的用户而言,这一部分内容颇具参考价值。
适用读者
  本书适合所有翻开它的人,因为我知道这本书在书店里一定是放在计算机图书专柜。本书尤其适合以下几类读者阅读。
1.被数据同步困扰的“电脑人”
  困扰“电脑人”的一个常见问题是,有太多的数据需要长久保存,有太多的电脑设备需要数据同步。可能有的人会说:“像Dropbox一样的网盘可以帮 助我呀”。是的,云存储就是在技术逐渐成熟之后应运而生的产品,但是依然解决不了如下几个问题:多个设备上同时修改造成的冲突;冗余数据传输造成的带宽瓶 颈;没有实现真正的、完全的历史变更数据备份。具体请参见本书第7篇第39章的内容。
  Git可以在数据同步方面做得更好,甚至只需借助小小的U盘就可以实现多台电脑的数据同步,并且支持自动的冲突解决。只要阅读本书第1篇和第2篇,就能轻易掌握相关的操作,实现数据的版本控制和同步。
2.学习计算机课程的学生
  我非常后悔没有在学习编程的第一天就开始使用版本控制,在学校时写的很多小程序和函数库都丢失了。直到使用了CVS和SVN对个人数据进行版本控制之后,才开始把每一天的变更历史都保留了下来。Git在这方面可以比CVS和SVN等做得更好。
  在阅读完本书的前3篇掌握了Git的基础知识之后,可以阅读第5篇第33章的内容,通过 Github 或类似的服务提供商建立自己的版本库托管,为自己的数据找一个安全的家。
3. 程序员
  使用Git会让程序员有更多的时间休息,因为可以更快地完成工作。分布式版本控制让每一个程序员都能在本地拥有一个完整的版本库,所以几乎所有操作都能够脱离网络执行而不受带宽的限制。加之使用了智能协议,版本库间的同步不但减少了数据传输量,还能显示完成进度。
  Git帮助程序员打开了进入开源世界的大门,进而开阔视野,提升水平,增加择业的砝码。看看使用Git作为版本控制的开源软件吧:Linux  kernel、Android、Debian、Fedora、GNOME、KDevelop、jQuery、Prototype、PostgreSQL、 Ruby on Rails……不胜枚举。还有,不要忘了所有的SVN版本库都可以通过Git方式更好地访问。
  作为一个程序员,必须具备团队协同能力,本书第3篇应该作为学习的重点。
4.Android程序员
  如果你是谷歌Android项目的参与者,尤其是驱动开发和核心开发的参与者,必然会接触Git、repo和Gerrit。对于只是偶尔参考一下 Android核心代码的Android应用开发人员而言,也需要对repo有深入的理解,这样才不至于每次为同步代码而耗费一天的时间。
  repo是Android为了解决Git多版本库管理问题而设计的工具,在本书第4篇第25章有详细介绍。
  Gerrit是谷歌为了避免因分布式开发造成项目分裂而开发的工具,打造了Android独具一格的集中式管理模式,在本书第5篇第32章有详细介绍。
  即使是非Android 项目,也可以使用这两款工具为自己的项目服务。我还为repo写了几个新的子命令以实现脱离Gerrit提交,让repo拥有更广泛的应用领域。
5.定制开发程序员
  当一个公司的软件产品需要针对不同的用户进行定制开发时,就需要在一个版本库中建立大量的特性分支,使用SVN的分支管理远不如使用Git的分支管 理那么自然和方便。还有一个应用领域就是对第三方代码进行维护。当使用SVN进行版本控制时,最自然的选择是卖主分支,但随着定制开发的逐渐深入,与上游 的偏离也会越大,于是与上游代码的合并也将越来越令人痛苦。
  第4篇第22章介绍Topgit这一杀手级的工具,这是这个领域最佳的解决方案。
6.SVN用户
  商业软件的研发团队因为需要精细的代码授权,所以不会轻易更换现有的SVN版本控制系统,这种情况下Git依然大有作为。无论是出差在外,或是在家 办公,或是开发团队分处异地,都会遇到SVN版本控制服务器无法访问或速度较慢的情况。这时git-svn这一工具会将Git和SVN完美地结合在一起, 既严格遵守SVN的授权规定,又可以自如地进行本地提交,当能够连接到SVN服务器时,可以在悠闲地喝着绿茶的同时,等待一次性批量提交的完成。
  我有几个项目(pySvnManager、Freemind-MMX)托管在 SourceForge 的SVN服务器上,现在都是先通过  git-svn 将其转化为本地的Git库,然后再使用的。以这样的方式访问历史数据、比较代码或提交代码,再也不会因为网速太慢而望眼欲穿了。
  本书第4篇第26章详细介绍了Git和SVN的互操作。
7. 管理员
  Git在很大程度上减轻了管理员的负担:分支的创建和删除不再需要管理员统一管理,因为作为分布式版本控制系统,每一个克隆就是一个分支,每一个克 隆都拥有独立的分支命名空间;管理员也不再需要为版本库的备份操心,因为每一个项目成员都拥有一个备份;管理员也不必担心有人在服务器上篡改版本库,因为 Git版本库的每一个对象(提交和文件等)都使用SHA1哈希值进行完整性校验,任何对历史数据的篡改都会因为对后续提交产生的连锁反应而原形毕露。
  本书第7篇第37章介绍了一款我开发的基于Git的备份工具,它使得 Linux 系统的数据备份易如反掌。本书第5篇介绍的Git服务器搭建,以及第6篇介绍的版本库迁移方面的知识会为版本控制管理员的日常维护工作提供指引。
8. 开发经理
  作为开发经理,你一定要对代码分支有深刻的理解,不知本书第18章中的“代码管理之殇”是否能引起你的共鸣。为了能在各种情况下恰当地管理开发团 队,第4篇“Git协同模型”是项目经理应该关注的重点。你的团队是否存在着跨平台开发,或者潜在着跨平台开发的可能?本书第8篇第40章也是开发经理应 当关注的内容。
排版约定
  本书使用的排版格式约定如下:
1. 命令输出及示例代码
  执行一条Git命令及其输出的示例如下:
  $ git –version
  git version 1.7.4
2. 提示符($)
  命令前面的 $ 符号代表命令提示符。
3. 等宽字体(Constant>  用于标示屏幕输出的字符 、示例代码,以及正文中出现的命令、参数、文件名和函数名等。
4. 等宽粗体(Constant>  用于表示由用户手工输入的内容。
5. 占位符()
  用尖括号扩起来的内容,表示命令中或代码中的占位符,读者应当用实际值将其替换。
在线资源
  官方网站:http://www.ossxp.com/doc/gotgit/
  在本书的官方网站上,大家可以了解到与本书相关的最新信息,查看本书的勘误,以及下载与本书相关的资源。官网是以Git方式维护的,人人都可以参与其中。
  新浪微博:http://weibo.com/GotGit
  欢迎大家通过新浪微博与作者交流,也欢迎大家通过新浪微博将你们的宝贵意见和建议反馈给作者。
致谢
  感谢 Linus Torvalds、Junio C Hamano 和Git项目的所有贡献者,是他们带给我们崭新的版本控制体验。
  本书能够出版要感谢机械工业出版社华章公司,华章公司对中文原创计算机图书的信任让中国的每一个计算机从业者都有可能圆自己出书的梦想。作为一个新 人,拿着一个新的选题,遇到同样充满激情的编辑,我无疑是幸运的。这个充满激情的编辑,就是华章公司的杨福川编辑。甚至没有向我索要样章,在看过目录之后 就“冒险”和我签约,他的激情让我不敢懈怠。同样要感谢王晓菲编辑,她的耐心和细致让我吃惊,也正是因为她的工作本书的行文才能更加流畅,本书也才能够更 快问世。还有张少波编辑,感谢她在接到我的电话后帮我分析选题并推荐给杨福川编辑。
  本书的部分内容是由我的Git培训讲义扩展而来的,在此感谢朝歌数码的蒋宗贵,是他的鼓励和鞭策让我完善了本书中的与服务器架设的相关章节。还要感谢王彦宁,正是通过她的团队我才认识了 Android,才有了本书关于 repo 和 Gerrit 的相关章节。
  感谢群英汇的同事们,尤其要感谢王胜,正是因为我们在使用 Topgit 0.7 版本时遇到了严重的冲突,才使我下定决心研究 Git。
  感谢上海爱立信研发中心的高级技术专家蔡煜,他对全书尤其是git-svn和Gitolite相关章节做了重点评审,他的意见和建议修正了本书的很多不当之处。因为时间的关系,他的一些非常好的观点没有机会在这一版中体现,争取在改版时弥补遗憾。
  中国科学院软件研究所的张先轶、比蒙科技的宋伯润和杨致伟、摩博科技的熊军、共致开源的秦红胜,以及王胜等人为本书的技术审校提供了帮助,感谢他们 的宝贵意见和建议。来自中国台湾的PyLabs 团队纠正了本书在对Hg的认识上的偏颇,让本书附录中的相关内容更加准确和客观,在此向他们表示感谢。
  因为写书亏欠家人很多,直到最近才发现女儿小雪是多么希望拥有一台儿童自行车。感谢妻子阿巧对我的耐心和为家庭的付出。感谢岳父、岳母这几年来对小 雪和我们整个家庭的照顾,让我没有后顾之忧。还要感谢我的父母和妹妹,他们对我事业的支持和鼓励是我前进的动力。在我写作本书的同时,老爸正在富春江畔代 表哈尔滨电机厂监督发电机组的制造,而且也在写一本监造手册方面的书,抱歉老爸,我先完成了。 :)
蒋鑫(http://www.ossxp.com/  )

  2011年4月
--------------------------------------

  关于《Git权威指南》,您可以访问【作者博客  】【作者微博  】【本书官网  】【互动网  】【当当网  】,感谢关注!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-589850-1-1.html 上篇帖子: git 细节总结 下篇帖子: git 提示 fatal: Unable to find remote helper for 'http'
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表