杨净 发自 凹非寺
量子位 报道 | 公众号 QbitAI
如何学用Git?
或许这有一本适合你的Git魔法书。
由斯坦福大学CS校友Ben Lynn编写,2007年出品的Git Magic,如今已经有12国语言编译,包括中文、法语、德语、意大利语、韩语……
此外还有5个版本:单个网页版、PDF版、可用作电子阅读器的EPUB文件,可快速本地拷贝的Debian包,还有在亚马逊售价9.95美元的实体书。
在GitHub上有1.4k星,有49位贡献者参与进来共同创作此书。
那么这样一套时隔13年仍然备受关注的书籍,到底有多好?
就先来一睹为快!
Git Magic
就拿中文版来说,这是由俊杰,萌和江薇共同编写。
整本书共分为8个章节以及2个附录。
入门
基本技巧
克隆代码库
分支巫术
关于历史
多人Git
Git大师技
揭开面纱
附录A:Git的缺点
附录B:本指南的翻译
在这些章节中,也还有作者的经验分享。
就如开头入门部分,作者就提到,「工作当作玩游戏」。
讲到「分布控制」时,将其设想成一个很很难打的游戏,以至于世界各地很多骨灰级玩家决定组队,分享他们游戏存档以攻克它。
在「基本技巧」里,作者开头就表示,
与其一头扎进Git命令的海洋里,不如就拿基本的例子来试试手。
实际上,在开始使用Git的头几个月,我所用的从来没超过本章介绍的内容。
除了保存状态,添加、删除、重命名,进阶撤销/重做、撤销……这些基本内容之外,还有练习题提供给大家。
除了个人经验之外,他还谈到偏爱Git的原因。
因为它能管理Linux内核源码。Git已经工作的很好了,并且我也没有被其瑕疵所困扰。而且我主要使用Linux,其他平台上的问题与我无关。
还有我偏爱C程序和bash脚本,以及诸如Python的可执行可脚本:其代码依赖性较低,并且我也沉迷于快速的执行时间。
Ben Lynn是谁?
再来谈谈这本书的作者——Ben Lynn,斯坦福大学CS校友。
在他的个人网站上,可以看到除了Git魔法书以外,还有PBC Library(一个免费的基于配对的C语言密码学库),数学与CS的笔记、博客,以及几个自制的浏览器游戏。
好了,如果感兴趣的话,可戳下方链接进一步了解学习哦~
Git Magic://www-cs-students.stanford.edu/~blynn/gitmagic/中文版://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/
— 完 —
本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。
每天5分钟,抓住行业发展机遇
如何关注、学习、用好人工智能?
每个工作日,量子位AI内参精选全球科技和研究最新动态,汇总新技术、新产品和新应用,梳理当日最热行业趋势和政策,搜索有价值的论文、教程、研究等。
同时,AI内参群为大家提供了交流和分享的平台,更好地满足大家获取AI资讯、学习AI技术的需求。扫码即可订阅:
加入AI社群,与优秀的人交流
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
喜欢就点「在看」吧 !
- Rust 程序设计语言
- 前言
- 简介
- 1. 入门指南
- 1.1. 安装
- 1.2. Hello, World!
- 1.3. Hello, Cargo!
- 2. 写个猜数字游戏
- 3. 常见编程概念
- 3.1. 变量与可变性
- 3.2. 数据类型
- 3.3. 函数
- 3.4. 注释
- 3.5. 控制流
- 4. 认识所有权
- 4.1. 什么是所有权?
- 4.2. 引用与借用
- 4.3. Slice 类型
- 5. 使用结构体组织相关联的数据
- 5.1. 结构体的定义和实例化
- 5.2. 结构体示例程序
- 5.3. 方法语法
- 6. 枚举和模式匹配
- 6.1. 枚举的定义
- 6.2. match 控制流结构
- 6.3. if let 简洁控制流
- 7. 使用包、Crate 和模块管理不断增长的项目
- 7.1. 包和 Crate
- 7.2. 定义模块来控制作用域与私有性
- 7.3. 引用模块项目的路径
- 7.4. 使用 use 关键字将路径引入作用域
- 7.5. 将模块拆分成多个文件
- 8. 常见集合
- 8.1. 使用 Vector 储存列表
- 8.2. 使用字符串储存 UTF-8 编码的文本
- 8.3. 使用 Hash Map 储存键值对
- 9. 错误处理
- 9.1. 用 panic! 处理不可恢复的错误
- 9.2. 用 Result 处理可恢复的错误
- 9.3. 要不要 panic!
- 10. 泛型、Trait 和生命周期
- 10.1. 泛型数据类型
- 10.2. Trait:定义共同行为
- 10.3. 生命周期确保引用有效
- 11. 编写自动化测试
- 11.1. 如何编写测试
- 11.2. 控制测试如何运行
- 11.3. 测试的组织结构
- 12. 一个 I/O 项目:构建命令行程序
- 12.1. 接受命令行参数
- 12.2. 读取文件
- 12.3. 重构以改进模块化与错误处理
- 12.4. 采用测试驱动开发完善库的功能
- 12.5. 处理环境变量
- 12.6. 将错误信息输出到标准错误而不是标准输出
- 13. Rust 中的函数式语言功能:迭代器与闭包
- 13.1. 闭包:可以捕获其环境的匿名函数
- 13.2. 使用迭代器处理元素序列
- 13.3. 改进之前的 I/O 项目
- 13.4. 性能比较:循环对迭代器
- 14. 更多关于 Cargo 和 Crates.io 的内容
- 14.1. 采用发布配置自定义构建
- 14.2. 将 crate 发布到 Crates.io
- 14.3. Cargo 工作空间
- 14.4. 使用 cargo install 从 Crates.io 安装二进制文件
- 14.5. Cargo 自定义扩展命令
- 15. 智能指针
- 15.1. 使用Box<T> 指向堆上数据
- 15.2. 使用Deref Trait 将智能指针当作常规引用处理
- 15.3. 使用Drop Trait 运行清理代码
- 15.4. Rc<T> 引用计数智能指针
- 15.5. RefCell<T> 与内部可变性模式
- 15.6. 引用循环会导致内存泄漏
- 16. 无畏并发
- 16.1. 使用线程同时地运行代码
- 16.2. 使用消息传递在线程间通信
- 16.3. 共享状态并发
- 16.4. 使用Sync 与 Send Traits 的可扩展并发
- 17. Rust 的面向对象编程特性
- 17.1. 面向对象语言的特点
- 17.2. 为使用不同类型的值而设计的 trait 对象
- 17.3. 面向对象设计模式的实现
- 18. 模式与模式匹配
- 18.1. 所有可能会用到模式的位置
- 18.2. Refutability(可反驳性): 模式是否会匹配失效
- 18.3. 模式语法
- 19. 高级特征
- 19.1. 不安全的 Rust
- 19.2. 高级 trait
- 19.3. 高级类型
- 19.4. 高级函数与闭包
- 19.5. 宏
- 20. 最后的项目: 构建多线程 web server
- 20.1. 建立单线程 web server
- 20.2. 将单线程 server 变为多线程 server
- 20.3. 优雅停机与清理
- 21. 附录
- 21.1. A - 关键字
- 21.2. B - 运算符与符号
- 21.3. C - 可派生的 trait
- 21.4. D - 实用开发工具
- 21.5. E - 版本
- 21.6. F - 本书译本
- 21.7. G - Rust 是如何开发的与 “Nightly Rust”