录
•1 Mercurial 一览: 基础 ◦1.1 安装
◦1.2 开始
◦1.3 代码仓库
◦1.4 修改和查看修改
◦1.5 提交修改
◦1.6 共享修改
•2 Mercurial 一览: 合并修改 ◦2.1 合并
◦2.2 合并冲突
•3 幕后 ◦3.1 Mercurial 的历史记录
◦3.2 修订历史、分支、合并
◦3.3 工作目录
•4 Mercurial 常用用法 ◦4.1 添加文件
◦4.2 Mercurial 跟踪的是文件,不是目录
◦4.3 停止跟踪文件
◦4.4 方便的添加/移除文件命令
◦4.5 拷贝文件
◦4.6 重命名文件
◦4.7 撤销提交
•5 协同工作 ◦5.1 Mercurial Web 接口
◦5.2 协作模型
•6 发布管理和分支管理
•7 发现和改正错误 ◦7.1 取消上次提交
◦7.2 取消错误的 pull
◦7.3 rollback 的限制
◦7.4 hg revert
◦7.5 hg backout
•8 定制 Mercurial 的输出
•9 应用实例 ◦9.1 用 mercurial 管理你的系统
•10 其他 ◦10.1 FAQS
◦10.2 配置文件
◦10.3 选项
◦10.4 中英文对照
1 Mercurial 一览: 基础
1.1 安装
Linux
Debian/Ubuntu:
apt-get install mercurial
Fedora Core:
yum install mercurial
Gentoo:
emerge mercurial
...
Windows
下载并安装。
1.2 开始
检查安装是否成功:
hg version
查看帮助:
hg help init
1.3 代码仓库
代码仓库不过是普通一个目录树。
获取代码库的本地拷贝
hg clone http://hg.serpentine.com/tutorial/hello
查看日志
hg log
hg log -r 3 # 指定修订号
hg log -r ff5d7b70a2a9 # changeset identifier
hg log -r 1 -r 4 # 指定多个修订号
hg log -r 1:3 # 指定修订号范围
hg log -r 3:1 # 修改 log 的输出顺序
获取更多信息
显示详细信息(-v, --verbose):
hg log -v -r 3
显示修改内容(-p, --patch):
hg log -v -p -r 2
1.4 修改和查看修改
用 hg clone 隔离我们的自己修改,值得说明的是:本地克隆不仅速度快,而且通常占用更小的磁盘空间:
$ cd ..
$ hg clone hello my-hello
$ cd my-hello
Note
一般情况下,最好保持远程代码库的一个原始拷贝,你可以从这里克隆多个副本进行修改,各个副本之间互相隔离。
查看修改:
$ hg status
$ hg diff
1.5 提交修改
设置用户名
修改配置文件:
[ui]
username = Your Name<Your Email Address>
linux
编辑 .hgrc, 按照前面的说明修改。
Windows
编辑 %USERPROFILE%Mercurial.ini。
如何找到 %USERPROFILE%:
•打开命令行, 缺省的目录通常就是 %USERPROFILE%, 或者用 ECHO %USERPROFILE% 查看
•也可以在打开文件的对话框中直接输入 %USERPROFILE%Mercurial.ini
Mercurial 尝试用户名的顺序
1.hg commit -u "用户名"
2.HGUSER 环境变量
3.~/.hgrc 中的 usernamme
4.EMAIL 环境变量
5.本地用户名 + 主机名
提交信息
由于 hg log 只显示提交信息的第一行,因此最好第一行写得完整、独立。
查看刚才的提交
hg tip -vp
1.6 共享修改
从其他代码库获取修改
查看其他代码库做了那些修改:
hg incomming ../my-hello
获取代码库的修改:
hg pull ../my-hello
更新工作目录
hg pull 更新了代码库,如果要更新工作目录,还需要执行:
hg update
hg pull 的 -u 参数可以获取代码库的修改的同时更新工作目录:
hg pull -u ../my-hello
更新到指定修订版:
hg update 2
[?]查看 parents 修订版:
hg parents
把修改发布到其他代码库
查看本地代码库做了那些修改:
hg outgoing ../my-hello
发布代码库的修改:
hg push ../my-hello
通过网络共享修改
hg outgoing http://hg.serpentine.com/tutorial/hello
hg push http://hg.serpentine.com/tutorial/hello
2 Mercurial 一览: 合并修改
2.1 合并
合并步骤,注意查看后面的说明:
hg pull ../my-hello # 现在代码库有多个 heads
hg heads # 查看代码库的 heads
#! hg update # 失败! 无法更新工作目录
#! hg update -C # 强制更新! 会丢失本地修改
hg merge # 合并修改
hg parents # 可以看到多个 parents
hg commit -m 'Merged changes' # 提交合并结果
2.2 合并冲突
3 幕后
和许多版本控制系统不同, Mercurial 的基础概念简单到很容易理解软件是如何工作的。
3.1 Mercurial 的历史记录
跟踪单个文件的历史
Mercurial 把文件保存在文件日志中,文件日志保存在 .hg/store/data 目录。
对于大文件来说,文件日志保存在两个文件中 .d (数据)文件 和 .i (索引)文件, 对于小文件来说只需要一个 .i 文件。
安全高效的存储
高效存储
采用增量机制。
安全操作
Mercurial 只在文件末尾增加数据。另外 Mercurial 把每次写操作作为事务的一部分,保证操作的原子性。
快速读取
采用索引文件。
3.2 修订历史、分支、合并
<略>
3.3 工作目录
工作目录保存代码库的一个快照。
4 Mercurial 常用用法
4.1 添加文件
hg init add-example
cd add-example
echo a > a
hg status
hg add a
hg commit -m 'Added one file'
hg status
4.2 Mercurial 跟踪的是文件,不是目录
Mercurial 跟踪的是文件,不是目录, 因此无法添加一个空目录, 需要空目录时有下面两个方法。
方法一: 添加一个隐含文件:
mkdir empty
touch empty/.hidden
hg add empty
方法二: 不要跟踪空目录,要空目录干嘛?需要时自己创建一个得了。
4.3 停止跟踪文件
hg remove
hg remove --force # 移除已修改/刚添加的文件
hg remove --after # 文件已经删除时,可以用
4.4 方便的添加/移除文件命令
添加未添加的文件,移除已经删除的文件:
hg addremove
4.5 拷贝文件
太麻烦了,不用也罢。
4.6 重命名文件
重命名文件使用拷贝文件的方式实现的,相当于拷贝文件并并删除原文件。
重命名也是比较麻烦的, 因此也要少用。
4.7 撤销提交
hg revert
5 协同工作
5.1 Mercurial Web 接口
简单服务器:
hg serve -p 8080
5.2 协作模型
有了合适的工具后, 采用何种工作流是一个文化问题而不是技术问题。 Mercurial 没有太多限制工作流, 因此需要你和你的工作组来确定适合你们自己需要的工作流。
需要考虑的因素
...
6 发布管理和分支管理
hg tag v1.0
hg tag -r 1 v1.1
hg tag -f -r 2 v1.1
hg log -r v1.0
hg tag --remove v1.1
hg tag -r 3 -l 1.1.1 # 本地 tag
分支示例:
myproject
myproject-1.0
myproject-1.0.1
myproject-1.0.1-bugfix
myproject-new-feature
合并示例:
hg pull ../myproject-new-feature
hg merge
hg commit -m 'Merge bugfix from 1.0.1 branch'
hg push
7 发现和改正错误
7.1 取消上次提交
hg rollback
7.2 取消错误的 pull
hg rollback
7.3 rollback 的限制
•一旦 push 后, rollback 就没用了
•只能 rollback 一次
7.4 hg revert
示例:
hg revert foo # 放弃对 foo 的修改
hg add bar # 错误添加了文件 bar
hg revert bar # 取消添加
hg remove file # 错误删除了文件 file
hg revert file # 好的,恢复了
rm file # 错了,删错了
hg revert file # 好的,恢复了
hg copy file newfile # 错了
hg revert newfile # 改正就行了
hg rename file newfile # 错了
hg revert newfile # 知错就改
7.5 hg backout
复杂的应用
8 定制 Mercurial 的输出
hg log --style compact
hg log --style changelog
hg log --template 'I saw a changeset: {desc}\n'
常用关键字:
•author
•branches
•date
•desc
•files
•filet_adds 添加的文件列表
•filet_dels 删除的文件列表
•node
•parents
•rev
•tags
9 应用实例
9.1 用 mercurial 管理你的系统
cd /
sudo hg init
sudo sh -c "echo -e 'syntax: glob\n*' > .hgignore"
sudo chown -R xxx\: .hg .hgignore
10 其他
10.1 FAQS
查看信息
如何知道当前使用的用户名
查看当前用户名:
hg showconfig ui.username
hg debugconfig ui.username # debugconfig -- alias of showconfig
查看工作目录的信息
hg parent # 查看工作目录的信息
hg id -n # 查看工作目录的修订版号
导出特定版本
hg archive -r ...
清空工作目录
hg update null
backout
xs
10.2 配置文件
查看配置文件的帮助:
man hgrc
10.3 选项
•-v, --verbose
•-q, --quiet
•-p, --patch
•-r, --rev
10.4 中英文对照
英文
中文
说明
repository
代码仓库
pull
获取
push
发布
•1 Mercurial 一览: 基础 ◦1.1 安装
◦1.2 开始
◦1.3 代码仓库
◦1.4 修改和查看修改
◦1.5 提交修改
◦1.6 共享修改
•2 Mercurial 一览: 合并修改 ◦2.1 合并
◦2.2 合并冲突
•3 幕后 ◦3.1 Mercurial 的历史记录
◦3.2 修订历史、分支、合并
◦3.3 工作目录
•4 Mercurial 常用用法 ◦4.1 添加文件
◦4.2 Mercurial 跟踪的是文件,不是目录
◦4.3 停止跟踪文件
◦4.4 方便的添加/移除文件命令
◦4.5 拷贝文件
◦4.6 重命名文件
◦4.7 撤销提交
•5 协同工作 ◦5.1 Mercurial Web 接口
◦5.2 协作模型
•6 发布管理和分支管理
•7 发现和改正错误 ◦7.1 取消上次提交
◦7.2 取消错误的 pull
◦7.3 rollback 的限制
◦7.4 hg revert
◦7.5 hg backout
•8 定制 Mercurial 的输出
•9 应用实例 ◦9.1 用 mercurial 管理你的系统
•10 其他 ◦10.1 FAQS
◦10.2 配置文件
◦10.3 选项
◦10.4 中英文对照
1 Mercurial 一览: 基础
1.1 安装
Linux
Debian/Ubuntu:
apt-get install mercurial
Fedora Core:
yum install mercurial
Gentoo:
emerge mercurial
...
Windows
下载并安装。
1.2 开始
检查安装是否成功:
hg version
查看帮助:
hg help init
1.3 代码仓库
代码仓库不过是普通一个目录树。
获取代码库的本地拷贝
hg clone http://hg.serpentine.com/tutorial/hello
查看日志
hg log
hg log -r 3 # 指定修订号
hg log -r ff5d7b70a2a9 # changeset identifier
hg log -r 1 -r 4 # 指定多个修订号
hg log -r 1:3 # 指定修订号范围
hg log -r 3:1 # 修改 log 的输出顺序
获取更多信息
显示详细信息(-v, --verbose):
hg log -v -r 3
显示修改内容(-p, --patch):
hg log -v -p -r 2
1.4 修改和查看修改
用 hg clone 隔离我们的自己修改,值得说明的是:本地克隆不仅速度快,而且通常占用更小的磁盘空间:
$ cd ..
$ hg clone hello my-hello
$ cd my-hello
Note
一般情况下,最好保持远程代码库的一个原始拷贝,你可以从这里克隆多个副本进行修改,各个副本之间互相隔离。
查看修改:
$ hg status
$ hg diff
1.5 提交修改
设置用户名
修改配置文件:
[ui]
username = Your Name<Your Email Address>
linux
编辑 .hgrc, 按照前面的说明修改。
Windows
编辑 %USERPROFILE%Mercurial.ini。
如何找到 %USERPROFILE%:
•打开命令行, 缺省的目录通常就是 %USERPROFILE%, 或者用 ECHO %USERPROFILE% 查看
•也可以在打开文件的对话框中直接输入 %USERPROFILE%Mercurial.ini
Mercurial 尝试用户名的顺序
1.hg commit -u "用户名"
2.HGUSER 环境变量
3.~/.hgrc 中的 usernamme
4.EMAIL 环境变量
5.本地用户名 + 主机名
提交信息
由于 hg log 只显示提交信息的第一行,因此最好第一行写得完整、独立。
查看刚才的提交
hg tip -vp
1.6 共享修改
从其他代码库获取修改
查看其他代码库做了那些修改:
hg incomming ../my-hello
获取代码库的修改:
hg pull ../my-hello
更新工作目录
hg pull 更新了代码库,如果要更新工作目录,还需要执行:
hg update
hg pull 的 -u 参数可以获取代码库的修改的同时更新工作目录:
hg pull -u ../my-hello
更新到指定修订版:
hg update 2
[?]查看 parents 修订版:
hg parents
把修改发布到其他代码库
查看本地代码库做了那些修改:
hg outgoing ../my-hello
发布代码库的修改:
hg push ../my-hello
通过网络共享修改
hg outgoing http://hg.serpentine.com/tutorial/hello
hg push http://hg.serpentine.com/tutorial/hello
2 Mercurial 一览: 合并修改
2.1 合并
合并步骤,注意查看后面的说明:
hg pull ../my-hello # 现在代码库有多个 heads
hg heads # 查看代码库的 heads
#! hg update # 失败! 无法更新工作目录
#! hg update -C # 强制更新! 会丢失本地修改
hg merge # 合并修改
hg parents # 可以看到多个 parents
hg commit -m 'Merged changes' # 提交合并结果
2.2 合并冲突
3 幕后
和许多版本控制系统不同, Mercurial 的基础概念简单到很容易理解软件是如何工作的。
3.1 Mercurial 的历史记录
跟踪单个文件的历史
Mercurial 把文件保存在文件日志中,文件日志保存在 .hg/store/data 目录。
对于大文件来说,文件日志保存在两个文件中 .d (数据)文件 和 .i (索引)文件, 对于小文件来说只需要一个 .i 文件。
安全高效的存储
高效存储
采用增量机制。
安全操作
Mercurial 只在文件末尾增加数据。另外 Mercurial 把每次写操作作为事务的一部分,保证操作的原子性。
快速读取
采用索引文件。
3.2 修订历史、分支、合并
<略>
3.3 工作目录
工作目录保存代码库的一个快照。
4 Mercurial 常用用法
4.1 添加文件
hg init add-example
cd add-example
echo a > a
hg status
hg add a
hg commit -m 'Added one file'
hg status
4.2 Mercurial 跟踪的是文件,不是目录
Mercurial 跟踪的是文件,不是目录, 因此无法添加一个空目录, 需要空目录时有下面两个方法。
方法一: 添加一个隐含文件:
mkdir empty
touch empty/.hidden
hg add empty
方法二: 不要跟踪空目录,要空目录干嘛?需要时自己创建一个得了。
4.3 停止跟踪文件
hg remove
hg remove --force # 移除已修改/刚添加的文件
hg remove --after # 文件已经删除时,可以用
4.4 方便的添加/移除文件命令
添加未添加的文件,移除已经删除的文件:
hg addremove
4.5 拷贝文件
太麻烦了,不用也罢。
4.6 重命名文件
重命名文件使用拷贝文件的方式实现的,相当于拷贝文件并并删除原文件。
重命名也是比较麻烦的, 因此也要少用。
4.7 撤销提交
hg revert
5 协同工作
5.1 Mercurial Web 接口
简单服务器:
hg serve -p 8080
5.2 协作模型
有了合适的工具后, 采用何种工作流是一个文化问题而不是技术问题。 Mercurial 没有太多限制工作流, 因此需要你和你的工作组来确定适合你们自己需要的工作流。
需要考虑的因素
...
6 发布管理和分支管理
hg tag v1.0
hg tag -r 1 v1.1
hg tag -f -r 2 v1.1
hg log -r v1.0
hg tag --remove v1.1
hg tag -r 3 -l 1.1.1 # 本地 tag
分支示例:
myproject
myproject-1.0
myproject-1.0.1
myproject-1.0.1-bugfix
myproject-new-feature
合并示例:
hg pull ../myproject-new-feature
hg merge
hg commit -m 'Merge bugfix from 1.0.1 branch'
hg push
7 发现和改正错误
7.1 取消上次提交
hg rollback
7.2 取消错误的 pull
hg rollback
7.3 rollback 的限制
•一旦 push 后, rollback 就没用了
•只能 rollback 一次
7.4 hg revert
示例:
hg revert foo # 放弃对 foo 的修改
hg add bar # 错误添加了文件 bar
hg revert bar # 取消添加
hg remove file # 错误删除了文件 file
hg revert file # 好的,恢复了
rm file # 错了,删错了
hg revert file # 好的,恢复了
hg copy file newfile # 错了
hg revert newfile # 改正就行了
hg rename file newfile # 错了
hg revert newfile # 知错就改
7.5 hg backout
复杂的应用
8 定制 Mercurial 的输出
hg log --style compact
hg log --style changelog
hg log --template 'I saw a changeset: {desc}\n'
常用关键字:
•author
•branches
•date
•desc
•files
•filet_adds 添加的文件列表
•filet_dels 删除的文件列表
•node
•parents
•rev
•tags
9 应用实例
9.1 用 mercurial 管理你的系统
cd /
sudo hg init
sudo sh -c "echo -e 'syntax: glob\n*' > .hgignore"
sudo chown -R xxx\: .hg .hgignore
10 其他
10.1 FAQS
查看信息
如何知道当前使用的用户名
查看当前用户名:
hg showconfig ui.username
hg debugconfig ui.username # debugconfig -- alias of showconfig
查看工作目录的信息
hg parent # 查看工作目录的信息
hg id -n # 查看工作目录的修订版号
导出特定版本
hg archive -r ...
清空工作目录
hg update null
backout
xs
10.2 配置文件
查看配置文件的帮助:
man hgrc
10.3 选项
•-v, --verbose
•-q, --quiet
•-p, --patch
•-r, --rev
10.4 中英文对照
英文
中文
说明
repository
代码仓库
pull
获取
push
发布