`
lxy2330
  • 浏览: 469482 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mercurial学习笔记

 
阅读更多

•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

发布



分享到:
评论

相关推荐

    Effective-Robotics-Programming-with-ROS——中文学习笔记

    ### Effective Robotics Programming with ROS —— 中文学习笔记 #### 知识点一:ROS环境配置与准备工作 **1.1 安装ROS Indigo** 在开始深入学习《Effective Robotics Programming with ROS》之前,首先需要搭建...

    辛星笔记之Pro Git

    辛星的笔记强调了传播知识的重要性,并表达了与读者共同学习、共同进步的愿望。他提供了联系方式,并鼓励读者在学习过程中互相交流、分享知识。此外,通过致敬原著作者Scott Chacon和译者团队,辛星表达了对知识传承...

    理工科PHD必备高效工具

    笔记整理对于科研工作也是非常重要的,Evernote是一个非常流行的笔记软件,可以帮助用户整理和搜索笔记内容。而在论文管理方面,Jabref是管理参考文献的好帮手。书籍管理方面,Calibre是一个全面的电子书管理工具,...

    分布式版本控制Tortoisehg使用的简单说明

    ### 分布式版本控制系统Tortoisehg的使用详解 #### 分布式版本控制的优势与应用场景 ...通过本文的学习,相信读者已经掌握了如何使用Tortoisehg来进行日常的版本控制操作,以及如何利用其特性提高工作效率。

    Git完全自学教程!自己做了笔记!

    * 在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端不只是提取出最新版的文件快照,而是把最原始的代码仓库镜像到本地。 Windows 上安装 Git: * Git 最早是在 Linux 上开发的,但现在已经可以在 ...

    《产品前端架构》笔记(2)

    在本《产品前端架构》笔记的第二部分中,作者西风潇潇对前端开发工程师在版本控制系统的知识进行了深入学习和记录。这部分内容涵盖了版本控制系统的概念、类型、优缺点、分支模型、工作流以及Git的介绍和使用方法。...

    Android版支持XMPP协议IM客户端源代码

    通过深入研究和理解这个源代码,开发者可以学习到如何在Android上构建XMPP客户端,如何处理网络通信,以及如何与Openfire服务器集成。这将为创建自己的即时通讯应用奠定坚实基础。同时,了解源码结构和编程实践也有...

    2018尚硅谷Git和GitHub视频教程

    通过本教程的学习,开发者能够熟练掌握Git的基本操作,了解版本控制的重要性,并能够在实际项目中运用Git进行有效的版本管理和团队协作。此外,还能够利用GitHub和GitLab等平台实现项目管理和团队协作,提高工作效率...

    vim-waikiki:Vim最小Wiki

    - **版本控制**:vim-waikiki与Vim的内置版本控制系统如Git、Mercurial等配合良好,可以方便地进行版本管理和历史查看。 **3. Vim脚本** vim-waikiki的实现依赖于Vim的脚本语言——Vimscript。Vimscript是Vim的内...

    vimwiki:vimwiki文件

    通过深入了解和熟练使用vimwiki,你可以构建一个高效、个性化的工作和知识管理系统,无论是日常笔记、项目管理还是学习资料整理,vimwiki都能成为得力的助手。不断探索和定制,将让vimwiki更好地服务于你的工作和...

    java源码论坛-dvcs-presentation:UniconJava开发人员论坛关于分布式源代码控制的演示

    与传统的集中式版本控制系统(如CVS或SVN)不同,DVCS(如Git和Mercurial)在每个开发者的本地机器上都保留了完整的历史版本库。这意味着每个开发人员都有权对代码进行修改,然后通过提交和推送操作与其他开发者共享...

    liyouqing:存储个人配置文件

    通过以上分析,我们可以看到"liyouqing-config-demo"可能是一个包含了各种常用工具和个人偏好的配置集合,对于任何IT专业人士来说,学习如何组织和管理个人配置文件都是提升工作效率的重要一环。

    中文IDEA教程

    2. **其他VCS**:除了Git,IDEA还支持SVN、Mercurial等版本控制系统。 ## 四、构建工具集成 1. **Maven支持**:IDEA可以方便地管理和构建Maven项目,包括添加依赖、调整POM.xml文件、运行Maven目标等。 2. **...

    最全Pycharm教程 - 精编版

    学习和熟练运用这些快捷键可以帮助开发者更快地完成任务,如快速打开文件、查找替换文本、重构代码等。 #### 七、将PyCharm作为Vim编辑器使用 对于习惯使用Vim的开发者来说,PyCharm也提供了模拟Vim模式的功能。...

Global site tag (gtag.js) - Google Analytics