- 引言
- 本书涉及的内容
- 第 1 部分 Python 开发入门
- 第 1 章 Python 入门
- 第 2 章 开发 Web 应用
- 第 3 章 Python 项目的结构与包的创建
- 第 4 章 面向团队开发的工具
- 第 5 章 项目管理与审查
- 第 6 章 用 Mercurial 管理源码
- 第 7 章 完备文档的基础
- 第 8 章 模块分割设计与单元测试
- 第 9 章 Python 封装及其运用
- 第 10 章 用 Jenkins 持续集成
- 第 11 章 环境搭建与部署的自动化
- 第 12 章 应用的性能改善
- 第 13 章 让测试为我们服务
- 第 14 章 轻松使用 Django
- 第 15 章 方便好用的 Python 模块
- 附录 A VirtualBox 的设置
- 附录 B OS(Ubuntu)的设置
1.2 安装 Mercurial
版本控制系统在如今的开发过程中已经十分普及,Python 自然也不例外。人们使用版本控制系统通常是为了多人一起管理源码,不过,将它引入到个人开发中也能带来不少好处。比如在开发过程中应用突然不工作了,我们就可以将其回溯成能正常工作的版本。另外,对版本进行管理之后,一旦哪里发现了问题,我们可以立刻沿时间线查找之前的版本,快速找出问题发生的时间点。
版本控制系统大致可分为两类,一类是 CVS 和 Subversion 这种单一版本库的版本控制系统,另一种则是 Mercurial 和 Git 这种分布式版本控制系统(Distributed Version Control System,DVCS),如今越来越多人倾向于使用后者。Mercurial 这种分布式版本控制系统最大的优势在于各个版本库独立,因此在创建分支、提交、取消更改时不会对周围人造成影响。而且分布式的版本库可以各自看作是彼此的备份。
接下来我们来了解一下 Mercurial。
1.2.1 Mercurial 概述
Mercurial 是 Linux 内核的开发者 Matt Mackall 于 2005 年开始开发的分布式版本控制系统。Linux 内核之父 Linus Torvalds 也于同期开始开发 Git。如今这二者已经成为分布式版本控制系统的代表,被人们广泛使用。
由于 Mercurial 本身就是由 Python 编写而成的,因此我们可以轻松地通过 pip 进行安装,也可以将其视为 Python 程序进行自定义设置。
对熟悉 Python 的用户而言易于上手,与使用 Python 进行开发的团队亲和力高,这些都是 Mercurial 的优势所在。
此外,Mercurial 的魅力还在于内置了基于 Web 的管理工具,支持 Bitbucket5 等著名源码托管服务,TortoiseHg6 等 GUI 客户端丰富,等等。
6 http://tortoisehg.bitbucket.org/
不仅如此,Mercurial 的命令体系与广为人知的 Subversion 很类似,对于长期使用 Subversion 的用户而言,要比 Git 更容易上手。
1.2.2 安装 Mercurial
单看前面的说明很难对分布式版本控制系统的优势有一个明确理解,所以现在我们通过实际的安装和操作来体会一下。另外,高级的 Mercurial 运用技巧我们将在第 6 章中进行学习,熟悉 Mercurial 的读者可以直接跳过本部分。
Mercurial 与其他程序包一样具有多种安装方法,用户可以通过 apt-get 、pip 、源文件构建等不同途径进行安装。这里我们为保证 Mercurial 尽量是最新版,决定选用 pip 进行安装(LIST 1.17)。
LIST 1.17 安装 Mercurial
$ sudo pip install mercurial
Mercurial 安装完成后我们就可以使用 hg 命令了。现在输入 hg --version 来查看版本(LIST 1.18)。
LIST 1.18 查看 Mercurial 的安装情况
$ hg --version Mercurial Distributed SCM (version 3.1.2) (see http://mercurial.selenic.com for more information) Copyright (C) 2005-2014 Matt Mackall and others This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1.2.3 创建版本库
在创建版本库之前,我们先准备好 Mercurial 的环境设置文件。在主目录下创建名为 .hgrc 的文件,然后进行如下描述。其中括号内的部分称为节(Section),比如 [ui] 节就是用来设置 username 属性的。
username 中的账户信息会在用户向版本库进行提交时记录在日志中。各位请将自己的账户名和邮箱地址写在这里(LIST 1.19)。
LIST 1.19 设置 .hgrc 的用户名与邮箱地址
[ui] username=bpbook <bpbook@beproud.jp> [extensions] color= pager= [pager] pager=LESS='FSRX' less
[extensions] 节用来激活 Mercurial 附属的扩展工具。只要将扩展工具名写入 [extensions] 节的项目中,我们就可以使用该工具了。此外,某些扩展工具不仅要在 [extensions] 中设置激活,还需要在 [pager] 节中设置 pager 属性。
完成环境设置文件之后就该创建版本库了。如 LIST 1.20 所示,我们为版本库创建一个目录并移动至该目录下,执行 hg init 命令创建版本库。
LIST 1.20 hg init(初始化版本库)
$ mkdir ~/hgtest $ cd ~/hgtest $ hg init
1.2.4 文件操作
创建好版本库之后让我们给它实际添加文件。现在创建一个测试用的文件,查看当前版本库的状态。
查看版本库状态用 hg status 命令(LIST 1.21)。如果觉得每次输入 status 太麻烦,可以将这个命令缩写为 hg st 。hg 命令为用户准备了部分缩写形式,感兴趣的读者可以参考帮助或其他资料。
LIST 1.21 hg status(查看状态)
$ touch test.txt $ hg status ? test.txt
文件名左侧显示了该文件在版本库内的状态。各位可以看到 text.txt 文件的左侧显示了状态“? ”,这代表该文件现在并不在版本管理的范围内。因此我们执行 hg add 命令将其添加为版本管理的对象,如 LIST 1.22 所示。
LIST 1.22 hg add(添加文件)
$ hg add test.txt $ hg status A test.txt
执行 hg add 之后我们再进行一次查看,会发现之前的“? ”已经变成了“A ”。这代表该文件是新添加到版本管理里的。
要想让添加文件反映到版本库,我们需要进行提交。提交时请按照 LIST 1.23 所示,输入 hg commit 命令。如果不执行 hg commit ,那么我们创建的文件就只能停留在当前工作的机器里,不会反映到版本库中。
LIST 1.23 hg commit(提交)
$ hg commit test commit HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: bpbook <bpbook@beproud.jp> HG: branch 'default' HG: added test.txt
执行 hg commit 后编辑器就会启动,用来记录提交时的相关信息与注释。我们在这里输入 test commit 。
注释输入栏下方显示着 branch 'default' ,这表示 default 分支(版本库创建时就存在的分支)为我们当前进行修正 / 添加操作的对象。
NOTE
提交时打开的编辑器是可以更改的。更改时需要如下例所示,在 .hgrc 的 [ui] 节里添加 editor 属性。
[ui] editor = vim
这表示我们要使用vim 编辑器。默认启动的编辑器取决于环境变量EDITOR,环境变量可以用下述命令查看。
$ echo $EDITOR vim
提交文件之后用 hg status 查看,结果应该如 LIST 1.24 所示,什么都没有。
LIST 1.24 提交后的查看
$ hg status
接下来我们看看如何在 Mercurial 中操作编辑过的文件。
先用编辑器打开 test.txt 进行修改,然后保存文件。在当前状态下执行 hg status 后,会发现该文件的状态变成了 M 。状态 M 表示该文件在最后一次提交之后又进行了“变更”(Modify)。使用 hg diff 命令可以查看变更前的状态(已提交的文件)与当前状态的差别(LIST 1.25)。
LIST 1.25 hg diff(查看差别)
$ hg status M test.txt $ hg diff diff -r 74471564b074 test.txt --- a/test.txt Mon Oct 31 18:07:15 2014 +0900 +++ b/test.txt Mon Oct 31 18:10:45 2014 +0900 @@ -0,0 +1,1 @@ +modify this file
在尚未提交的状态下,我们可以使用 hg revert 命令撤销编辑(LIST 1.26)。
LIST 1.26 hg revert(撤销编辑)
$ hg revert test.txt
NOTE
hg revent 可以撤销尚未提交的内容,但对已提交的内容无效。这种情况需要使用 hg commit --amend 命令对已提交的变更集进行修改或撤销。
Mercurial 的基本操作方法就解说到这里,但下列几项我们并未提及。
· 分支的操作
· 远程版本库的使用
· 以团队开发为前提的 Mercurial 的使用方法
上述几点我们将在第 4 章和第 6 章中详细了解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论