因爲最近公司即將從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
軟件,要注意改動路徑。