因为最近公司即将从Mercurial
版本管理迁移到GitLab
上,特此写下此文记念一下。git
Mercurial
在IT界是跨平台的分布式版本控制软件,主要由Python语言实现。主要是命令行程序操做,图像化呢也有。因为该软件命名中文翻译是——水银,为了输入命令时方便,用元素命名Hg
来做为调用程序的关键字。shell
目前网络上提供托管服务的有bucket
网络
wiki
做者我呢,用过svn,git,最后才接触hg,用来的感受吧。命令像git,但没git那么复杂,说他像svn呢,感受这软件比较年轻。ssh
## 帮助 $ hg help ## 初始化: $ hg init ## 查看状态,会展现对改动了哪些被跟踪文件,新增未跟踪文件,冲突文件 $ hg status ## 查看远程仓库地址 $ hg paths ## 查看当前分支 $ hg branch ## 查看日志 $ hg log
## 从远程仓库克隆到本地 $ hg clone ssh://code@code.example.com/repository ## 新增文件 $ hg add "file-name" ## 在作了更改后 $ hg commit -m 'change description...' ## 推送该分支的更改到远程仓库 $ hg push -r "version_number" ## 从远程仓库拉取 $ hg pull ## 将拉到本地远程仓库的内容和本地仓库合并 $ hg fetch ## 撤销对当前文件的修改 $ hg revert "file-name" ## 撤销上一次提交,并将上一次提交的内容,放入待提交区 $ hg rollback
特别说明一下 hg rollback只能回滚一次。意思是:若是你提交了两次,运行rollback两次,也只能回滚最近的那一次。
## 建立分支 $ hg branch "new_branch_name" ## 切换到该分支 $ hg update "branch_name" ## 将这个分支合并到当前分支上 $ hg merge "other_branch_name" ## 推送该分支的改动到远程仓库 $ hg push -b "branch_name"
这分支操做,SVN的感受
hg草稿管理分布式
## 将当前的被跟踪的改动存到草稿,并命名 $ hg shelve --name "draft_name" ## 展现当前项目的草稿 $ hg shelve --list ## 将这个保存在草稿内的改动应用到当前项目 $ hg unshelve "draft_name"
类比
git stash
, 使用该功能须要开启拓展 shelve
## 查看当前对跟踪文件的改动 $ hg diff ## 查看当前版本对于"version_number" 版本的不一样 $ hg diff -r "version_number" ## 查看ver2相对于ver1的改动 $ hg diff -r "ver1" -r "ver2"
## 将该版本的提交记录直接复制过来, 命令成功后,会在当前分支生成一个提交记录! $ hg graft -r "rev"
就是
git cherry-pick
## 将当前已跟踪文件的更改导入 ./code.patch 文件内 $ hg diff > code.patch ## 将文件内改动应用到当前项目 $ hg import code.patch --no-commit
你可把这个功能当保存草稿用,也能离线推送编辑给别人
hg日志查看svn
## 查看最新版本 $ hg tip ## 查看日志,并附上分支图 $ hg log -G ## 查看此次提交的日志 $ hg log -r "version_number"
hg 使用了自增天然数,和hash字符共同管理版本号,集svn,git版本号于一身,这下你挑不出毛病了吧
## 查看上一个版本提交日志 $ hg parent
全局配置文件放在~/.hgrc
,当前项目的配置文件放在./.hg/
隐藏目录内。远程仓库
的路径记录在./.hg/hgrc
内。工具
配置提交时署名fetch
## file ~/.hgrc [ui] username = zhang3 <zhang3@example.com>
hg
的拓展管理使用ini
格式文件管理,内部拓展只须要写上拓展名就像开关同样,使用第三方拓展须要指明拓展文件路径。ui
[extensions] shelve = strip = my_ext = ~/my_ext.py
sparse-revlog
相关的报错这个是各个hg版本兼容性问题。spa
若是你在使用SourceTree
, TortoiseHg
等这样的可视化版本管理工具,通常会自带一个hg
软件,要注意改动路径。