生成构建器
1 | mkdir -p build |
这里,我们创建了一个目录 build (生成构建器的位置),进入 build 目录,并通过指定 CMakeLists.txt 的位置(本例中位于父目录中)来调用 CMake。
CMake语言不区分大小写,但是参数区分大小写。
Git 的主要职责是保证你不会丢失提交的修改。但是,它同样被设计成让你完全掌控开发工作流。这包括了让你自定义你的项目历史,而这也创造了丢失提交的可能性。Git 提供了可以重写项目历史的命令,但也警告你这些命令可能会让你丢失内容。
这份教程讨论了重写提交快照的一些常见原因,并告诉你如何避免不好的影响。
git commit --amend
命令是修复最新提交的便捷方式。它允许你将缓存的修改和之前的提交合并到一起,而不是提交一个全新的快照。它还可以用来简单地编辑上一次提交的信息而不改变快照。
但是,amend 不只是修改了最新的提交——它进行了一次替换。对于 Git 来说,这看上去像一个全新的提交,即上图中用星号表示的那一个。在公共仓库工作时一定要牢记这一点。
这章教程提供了和项目旧版本打交道所需要的所有技巧。首先,你会知道如何浏览旧的提交,然后了解回滚项目历史中的公有提交和回滚本地机器上的私有更改之间的区别。
见上一章「6.检出历史提交」。
git revert
命令用来撤销一个已经提交的快照。但是,它是通过搞清楚如何撤销这个提交引入的更改,然后在最后加上一个撤销了更改的 新 提交,而不是从项目历史中移除这个提交。这避免了Git丢失项目历史,这一点对于你的版本历史和协作的可靠性来说是很重要的。
1 | git revert <commit> |
git add / git commit / git diff / git stash / .gitignore
“保存”这个概念在 Git 等版本控制系统和 Word 等文本编辑应用中不太一样。传统软件里的“保存”在 Git 里被叫做“提交”(commit)。 我们常说的的保存可以理解成在文件系统中覆盖一个已有的文件或者创建一个新的文件。而在 Git 中,提交这个操作作用于若干个文件和目录。
在 Git 和 SVN 里保存更改也不一样。SVN 提交或检入(check-in)将会推送到远端的中央服务器。也就是说 SVN 的提交需要联网才能完全“保存”项目更改。Git 提交可以在本地完成,然后再使用git push -u origin master
命令推送到远端服务器。这两种方法的区别体现了两种架构设计的本质区别。Git 是一个分布式的应用,而 SVN 是一个中心化的应用。分布式应用一般来说更可靠,因为它们不存在中央服务器这样的单点故障。
git add
、git status
和git commit
这三个命令通常一起使用,将 Git 项目当前的状态保存成一份快照。
这一章简要地带你了解一些最重要的 Git 命令。在这节中,我会向你介绍开始一个新的版本控制项目需要的所有工具,后面的几节包含了你每天都会用到的Git操作。
在这节之后,你应该能够创建一个新的 Git 仓库,缓存你的项目以免丢失,以及查看你项目的历史。
git init
命令创建一个新的 Git 仓库。它用来将已存在但还没有版本控制的项目转换成一个 Git 仓库,或者创建一个空的新仓库。大多数Git命令在未初始化的仓库中都是无法使用的,所以这就是你运行新项目的第一个命令了。
运行 git init
命令会在你项目的根目录下创建一个新的 .git
目录,其中包含了你项目必需的所有元数据。除了 .git
目录之外,已经存在的项目不会被改变(就像 SVN 一样,Git 不强制每个子目录中都有一个 .git
目录)。
1 | git init |
到目前为止,Git 是世界上使用最为广泛的现代化版本控制系统。Git 最初由 Linux 系统内核的作者 Linus Torvalds 在 2005 年开始开发,目前已经是一个持续维护的成熟开源项目。如今,大量软件项目依赖 Git 进行版本管理,其中既有开源软件,也有商业软件。Git 在很多操作系统和集成开发环境(IDE)上都表现良好。绝大多数软件开发者或多或少都使用过 Git。
Git 是分布式版本管理(DVCS)的一种。CVS 和 Subversion(SVN)等集中式的版本管理软件将完整的版本历史存放在同一个地方。而在 Git 中,每个开发者的代码仓库都包含了所有变更历史。
除了分布式之外,Git 在设计之初也考虑了性能、安全性和灵活性。
Git 的底层性能相较于其他版本管理软件有强大的优势。提交修改、创建分支、合并分支和比较版本都针对性能进行了优化。Git 中实现的算法利用了现实中代码树的特点以及它们被修改和访问的常见模式。
不同于某些版本管理软件,Git 在决定文件树的储存和版本历史时,不会被文件名的变化所愚弄——Git 关注的是文件的内容本身。毕竟,代码文件经常会被重命名、拆分和重新编排。Git 仓库中的文件对象通过差分编码(delta encoding,仅保存代码修改的差分)和压缩技术储存,并且直接保存文件夹中的内容和版本控制元数据。