本篇介紹mercurial。
因為這是我現在用得最多的scm——最近乙個月來幾個程式都在用它——所以會說得詳細一些。
我是從雲風的blog裡看到關於mercurial的介紹,他在文章中介紹了常用的幾種drcs,他個人推薦的是darcs,但我卻看中了mercurial。
mercurial 的優點在於功能強大並且速度超快(相對bazaar而言,與svn相比似乎也快一些),看原始碼mercurial也是用python寫的,只不過發布版像 是用py2exe等工具編譯成的exe,不知道為什麼速度會這麼快。缺點是操作遠端repository的功能需要一些服務端的安裝配置工作,這點不如 bazaar方便。
關於mercurial的使用推薦參考這裡的兩頁文件,很實用。mercurial的操作命令雖然跟bazaar差不多,但是設計思路比bazaar更加「分布」一些,與傳統scm差別較大,可能需要一段時間適應。
不過要在windows下通過ssh使用遠端repository的話,需要一些額外的安裝配置工作。如果你使用的不是windows或者在windows上已經安裝了帶有ssh命令的cygwin,可以跳過下面這一部分,直接到後面的「mercurial的使用」部分。
ssh = d:\tools\plink.exe -ssh -pw passwordusername項很好理解,就相當於bazaar裡的whoami命令——我不知道為什麼mercurial沒有這個命令,而是預設使用loginname@hostname的形式來標記當前使用者,大概它覺得這只是標誌,沒有什麼關係,反正它擁有超強的分支/合併功能。username = username
ssh 項就是與ssh有關的配置專案了。按照參考文件中所說的,mercurial通過ssh操作遠端repository時可以互動提示輸入登入密碼,但是我 在windows下試驗失敗,可能是plink的問題。所以在第一次從遠端repository上clone到本地repository時需要在這裡用- pw選項輸入登入密碼(不過用完就可以去掉這一項了——因為不同的專案可能使用不同的遠端repository,所以就可能使用不同的使用者和密碼,那個時 候可以配置到專案的.hgrc裡,詳見後面的說明)。
mercurial的使用:
完成必要的安裝配置工作以後就可以開始使用了。
mercurial的命令是hg——就是汞。不過說實話,我看到mercurial這個詞想到的是水星。
開始乙個專案有兩種情況:一是還沒有任何repository的全新專案;二是加入乙個已經有的專案——通常已經建立了乙個公共的遠端repository。
第一種情況的流程大致是這樣:
1、建立本地repository。在專案的工作目錄下執行:
hg init將會建立乙個.hg的目錄。
2、配置專案目錄(可選)。主要內容有兩項,乙個是配置.hgignore,把不需要加入管理的檔案排除掉;另乙個是配置.hgrc,主要是配置ssh(此項僅針對在windows下用plink進行ssh連線的情況):
.hgignore檔案放在專案的根目錄上,其內容舉例如下:
syntax: glob使用方法一看就明了,就不解釋了。*.py[co]
*.swp
*~
.hgrc檔案放在.hg目錄中,其內容舉例如下:
[paths]ui段裡的配置與mercurial.ini是一樣的格式和含義。在windows下使用plink連線ssh需要在這裡用-pw選項配置登入密碼,以使pull/push操作能夠正常工作。default = ssh://username@remotehost//home/username/projname
default-push = ssh://username@remotehost//home/username/projname
[ui]
ssh = d:\tools\plink.exe -ssh -pw password
3、檢查專案狀態。命令為:
hg status將會列出所有未commit的有效專案檔案及其狀態——如果在commit以後專案檔案未任何修改,此操作將無反饋資訊。
比如在剛初始化完以後進行檢查,將會列出所有專案檔案(被.hgignore排除的檔案將不顯示),並在前面有乙個?標誌,表示這些檔案尚未被版本管理。
在作完第一次add操作以後檢查,則?標誌將變為a標誌,表示是新增的檔案。
如果在commit以後有檔案被修改過,則狀態檢查會列出這些被修改過的檔案,並加上m標誌。
如果在commit以後有檔案被刪除或改名,則狀態檢查會把這些檔案加上!標誌——改名後的新檔案則會作為未管理的新檔案而加上?標誌。
需要從本地repository裡刪除!標誌檔案則需要使用remove命令,詳見後面的說明。
4、將專案檔案加入本地repository。命令很簡單:
hg add即可將專案目錄中除了在.hgignore中被排除的檔案以外的所有檔案都加入到本地repository中(當然不包括.hg目錄,但是會包括.hgignore檔案本身)。
5、將變更提交到本地repository。命令為:
hg commit -m "關於本次提交的說明文字"6、提交到遠端repository。這裡只介紹通過ssh提交的方法,通過http的方法請自行參考相關文件。
sudo apt-get install mercurial即可。
然後在服務端的專案目錄下建立乙個空的repository(bazaar不需要這樣的步驟,它可以用sftp直接在空目錄裡遠端建立):
cd /home/username/projname最後就可以在客戶端推送repository了,在專案目錄下執行:hg init
hg push ssh://username@remotehostname//home/username/projname如果配置了.hgrc裡的paths段的default-push,則可以直接用:
hg push如果提交失敗,請檢查.hgrc和/或mercurial.ini裡是否正確地配置了plink的pw選項,或者是ssh的埠號是否正確。如果配置無誤仍然失敗,可以用debug選項看一下詳細出錯資訊:
hg push --debug再來看第二種情況,即已經存在遠端公共repository的情況。
1、首先建立本地的副本:
hg clone ssh://username@remotehostname//home/username/projname注意,在windows+plink的情況下,必須先在mercurial.ini裡配置plink的pw選項,否則不能正常工作——此時還沒有.hgrc可以配置,所以只能用mercurial.ini這個全域性配置。
正常執行以後將在當前目錄下建立乙個projname的子目錄,其中包含了本地repository(.hg目錄)和工作目錄的全部內容。
2、通常還是需要配置一下.hgrc(可選),不過.hgignore會一起被clone下來,一般不必再配置。
3、status/add/commit/push等命令與第一種情況相同。
現在再來看兩種情況都需要的一些別的操作:
1、刪除檔案:
hg remove path/filename刪除後的檔案在status命令結果裡將被標誌為r。需要用萬用字元刪除多個檔案時,可以使用-i選項:
hg remove -i path/wildcard .2、從遠端repository取得別人加入的更新:
hg pull ssh://username@remotehostname//home/username/projname同樣,如果配置了.hgrc,就可以不用輸入url,直接用:
hg pull取得更新。不過此操作只是更新本地repository,你還需要用:
hg update來更新工作目錄下的檔案。
如果發生變更衝突,此操作會自動進行merge,對於不能自動merge的部分,會彈出缺省編輯器(可以在mercurial.ini裡配置)要求手工處理。處理完成後會在本地repository實現自動合併。
3、關於push的補充:
4、除了status檢查工作目錄狀態以外,還有幾個命令用於檢查本地repository狀態:
hg head其中head命令顯示當前本地repository中工作分支的最新版本的提交資訊。heads命令顯示當前本地repository中所有未合併分支的最新版本的提交資訊。log命令則是顯示提交的歷史記錄。hg heads
hg log
mercurial 還有一套很強的變更打包解包功能,即乙個開發者可以把自己本地repository中的變更記錄打包發給別人,別的開發者得到這個變更包以後,可以解包到 自己的repository裡,這樣就可以連公共的遠端repository也不需要。這樣的「分布式」真是太徹底了。
更多關於mercurial的資訊請參考這裡。
(未完待續)
分布式版本控制
git基本概念 git倉庫 儲存所有資料的地方 工作區 從倉庫中提取出來的檔案,放在磁碟上供你使用或修改 暫存區 就是乙個檔案,索引檔案,儲存了下次將提交的檔案列表資訊 版本控制軟體 1 集中式版本控制軟體 cvs svn subversion 2 分布式版本控制軟體 git bitkeeper 收...
GIT分布式版本控制
git config global user.name your name git config global user.email email example.com git init初始化建立版本庫 git clone url從網路上轉殖repository,注意clone是複製了history...
分布式版本控制(二)
本篇介紹bazaar 我知道bazaar是從livid那裡看到的,他這篇介紹基本上就是翻譯bazaar官方的乙個快速入門文件,強烈推薦參考一下。bazaar 的缺點是速度太慢。它的慢倒不是像雲風所說的那樣,對大專案太慢,而是因為它是純python的程式,在windows下每次執行都要啟動python...