Setting Up for a Team
使用水銀的好處之一是可以使一個(gè)團(tuán)隊(duì)協(xié)同工作。水銀使得你們可以單獨(dú)地工作乙埃,然后把你們的更改合并到一起。
使用水銀來(lái)協(xié)同工作的最普遍的方法就是在我們的個(gè)人計(jì)算機(jī)之外,再建立一個(gè)中央倉(cāng)庫(kù)茅撞。我們可以把中央倉(cāng)庫(kù)作為一個(gè)交換區(qū)秉颗,從而來(lái)得知大家都作了哪些更改。
建立中央倉(cāng)庫(kù)的最簡(jiǎn)單粗暴的辦法就是在服務(wù)器上澜建,用hg init命令向挖。并且使用hg serve命令使之成為web服務(wù)端。默認(rèn)地炕舵,該服務(wù)的端口號(hào)為8000.
由于這臺(tái)電腦的名字叫做joel.example.com何之,因此可以通過(guò)網(wǎng)址http://joel.example.com:8000/來(lái)登錄。
中央web服務(wù)端運(yùn)行之后咽筋,我就可以從將這個(gè)倉(cāng)庫(kù)從服務(wù)器端拷貝到我的電腦上為我所用了溶推。這個(gè)倉(cāng)庫(kù)現(xiàn)在是空著的,因此我也只拷貝到了空的倉(cāng)庫(kù)奸攻。
現(xiàn)在我要建立一個(gè)叫做guac的文件蒜危。
我添加這個(gè)文件,然后提交睹耐,以作為第一個(gè)官方版本辐赞。
我會(huì)提供一個(gè)提交注釋?zhuān)?/p>
我快快地做些許改變,使得我們的倉(cāng)庫(kù)也有些歷史:
現(xiàn)在提交變更:
看硝训,我提交的時(shí)候用了-m這個(gè)參數(shù)响委。這是在命令行直接寫(xiě)提交信息的方法新思。
OK。現(xiàn)在我們到哪里了呢晃酒?我們建立了中心倉(cāng)庫(kù)表牢,并且復(fù)制到了本地電腦上。然后做了兩個(gè)變更并且提交了贝次。然而那些變更只是在我的本機(jī)上——它們還沒(méi)有出現(xiàn)于中心倉(cāng)庫(kù)呢崔兴。因此,現(xiàn)在水銀的世界看上去是這樣的:
現(xiàn)在蛔翅,我們要使用hg push這個(gè)命令敲茄,來(lái)把我的變更推到中心倉(cāng)庫(kù)中:
很好。然而似乎不行山析。這里有一個(gè)安全性的考量堰燎,看看是不是要讓全世界的人都可以把它們的變更推送到中心倉(cāng)庫(kù)中∷窆欤可以通過(guò)編輯服務(wù)端的.hg\hgrc來(lái)配置秆剪。
當(dāng)然,這樣做是不安全的爵政。然而如果你的工作環(huán)境是一個(gè)被保護(hù)的比較好的局域網(wǎng)仅讽,并且該局域網(wǎng)中的同事是值得信賴(lài)的,那么這樣做也是可以的钾挟。否則的話(huà)洁灵,你需要去讀一下有關(guān)安全的章節(jié)。
好了掺出,現(xiàn)在重啟服務(wù)徽千。
現(xiàn)在就可以推送了:
現(xiàn)在,水銀的世界看起來(lái)就是這樣:
我知道你在想什么汤锨,你在想双抽,“很奇怪啊,為什么這些倉(cāng)庫(kù)中只有變更信息而沒(méi)有文件闲礼?guac文件在哪里荠诬?”
是的,很奇怪位仁。然而分布式版本控制器就是這么工作的柑贞。倉(cāng)庫(kù)中只包含了變更棧。
我們可以使用網(wǎng)頁(yè)瀏覽器來(lái)一瞥現(xiàn)在的中心倉(cāng)庫(kù):
現(xiàn)在我想要Rose來(lái)幫忙我的工作聂抢。Rose在測(cè)試組钧嘶。
Rose使用hg clone命令來(lái)獲得她自己的完整的倉(cāng)庫(kù)拷貝。hg clone命令帶兩個(gè)參數(shù)琳疏。一個(gè)是倉(cāng)庫(kù)的源地址有决,一個(gè)是目標(biāo)文件夾的名字闸拿。她現(xiàn)在構(gòu)建了她自己的recipes文件夾。
利用hg log命令书幕,她看到了所有的歷史新荤。她實(shí)際上下載了整個(gè)倉(cāng)庫(kù),包含了在這個(gè)倉(cāng)庫(kù)發(fā)生的所有歷史台汇。
Rose將要完成一個(gè)變更苛骨,并且提交到中心倉(cāng)庫(kù):
她現(xiàn)在進(jìn)行提交。注意苟呐,即使服務(wù)器沒(méi)有運(yùn)行痒芝,提交的過(guò)程也能在她的機(jī)器上完成。
當(dāng)Rose在進(jìn)行她的變更之時(shí)牵素,我也可以在同時(shí)進(jìn)行我的變更严衬。
當(dāng)我提交的時(shí)候,你會(huì)發(fā)現(xiàn)我的變更集#2與Rose的變更集#2并不相同笆呆。
我們的歷史開(kāi)始分離请琳。
不用擔(dān)心……過(guò)一會(huì)兒我們就會(huì)看到如何將這些分離的變更合到一起。
Rose可以在離線(xiàn)狀態(tài)繼續(xù)她的工作赠幕。只要愿意俄精,她可以作出任意多的變更,然后提交也可以劣坊,revert也可以。直到在某一時(shí)刻屈留,她想要與外界分享她提交的內(nèi)容局冰。她可以輸入hg outgoing來(lái)顯示她可以上傳到中心倉(cāng)庫(kù)的所有變更集。如果她再輸入hg push灌危,則這些變更集會(huì)全部上傳到中心倉(cāng)庫(kù)中康二。
可以這樣來(lái)認(rèn)識(shí)hg outgoing:它就是簡(jiǎn)單地列出當(dāng)前倉(cāng)庫(kù)有,而中心倉(cāng)庫(kù)沒(méi)有的勇蝙。
OK沫勿,Rose推送了她的變更。
現(xiàn)在水銀的世界變成了這樣:
當(dāng)我從當(dāng)天的第四個(gè)拿鐵休息中回來(lái)味混,我也準(zhǔn)備要推送我的變更了产雹。
啊……失敗了!順便要說(shuō)的是翁锡,看到那條信息了嗎蔓挖?就是那條說(shuō)要用push -f to force的那條。那是一條很糟糕的建議馆衔。永遠(yuǎn)永遠(yuǎn)不要使用push -f來(lái)強(qiáng)制推送瘟判。否則你會(huì)后悔的怨绣。請(qǐng)暫時(shí)相信我。
Rose能推送成功而我卻失敗了的原因是拷获,我們兩個(gè)人都做出了變更篮撑,而她先我一步推送了。現(xiàn)在需要先進(jìn)行合并匆瓜。而水銀知道這一點(diǎn)赢笨。
我現(xiàn)在要做的是獲取那些在中心倉(cāng)庫(kù)中有的,而我沒(méi)有的陕壹。從而我可以合并它們质欲。
上面有一個(gè)+1heads。這個(gè)意思是我之前就一條主線(xiàn)糠馆,現(xiàn)在變成有兩條線(xiàn)了嘶伟,變成了有兩個(gè)頭的怪物。就像這樣:
現(xiàn)在在我的倉(cāng)庫(kù)里面有兩個(gè)版本了……我有我的版本:
還有Rose的版本:
現(xiàn)在要我來(lái)合并它們又碌。幸運(yùn)的是九昧,這很簡(jiǎn)單。
看毕匀,hg merge命令將我的兩個(gè)頭合并到了一起铸鹰。在當(dāng)前的情況下,由于我們是分別編輯的文件的不同部分皂岔,因此根本沒(méi)有任何沖突蹋笼。
我還需要提交一下。這很重要躁垛。如果合并失敗了剖毯,我也總能回滾并且再次嘗試。由于合并很成功教馆,我打算提交它逊谋。然后我就可以將我的變更推送到中心倉(cāng)庫(kù)了。
現(xiàn)在中心倉(cāng)庫(kù)的內(nèi)容就和我做的同步了:
OK土铺,現(xiàn)在我有了Rose的變更胶滋,以及我的變更,然而Rose卻還沒(méi)有我的變更悲敷。
Rose這時(shí)需要拉下倉(cāng)庫(kù)中的最新版本究恤。
然后你會(huì)感到有一點(diǎn)奇怪。因?yàn)榧词筊ose將新的變更都拉到了她的倉(cāng)庫(kù)中后德,它們竟然沒(méi)有出現(xiàn)在她的工作目錄中丁溅。
然而在她的倉(cāng)庫(kù)中其實(shí)是有新的變更的……
它們不再她的工作目錄中是因?yàn)樗匀辉谧兏?2上工作。你可以通過(guò)“parent”命令來(lái)看到探遵。
水銀總是對(duì)我們很友好窟赏。它保證我們拉的很安全妓柜;它所做的就是給我們其他人做的最新的變更。我們可以在自己方便的時(shí)候再轉(zhuǎn)換過(guò)去涯穷。
記住棍掐,不帶任何參數(shù)的hg up命令會(huì)將工作目錄更新到最高的變更集。在此例中為數(shù)字4:
當(dāng)一個(gè)團(tuán)隊(duì)在工作時(shí)拷况,你的工作流看起來(lái)大概是這樣的:
- 如果你一段時(shí)間沒(méi)搞了作煌,那么就先去獲得最新的版本:
- hg pull
- hg up
- 做一些變更
- 提交它們(本地)
- 重復(fù)步驟2-3直到你滿(mǎn)意了并且想要與他人的工作合并
- 當(dāng)你準(zhǔn)備好要分享時(shí):
- hg pull來(lái)獲得別人的變更(如果有的話(huà))
- hg merge來(lái)將它們合并到你的里面
- 測(cè)試!保證合并沒(méi)有把什么事情變?cè)?/li>
- hg push
自測(cè)
以下是你學(xué)完這篇教程后應(yīng)該會(huì)做的:
- 建立中心倉(cāng)庫(kù)并且讓團(tuán)隊(duì)成員從此處拷貝赚瘦。
- 把變更推到中心倉(cāng)庫(kù)中粟誓。
- 從中心倉(cāng)庫(kù)拉取變更。
- 從不同的貢獻(xiàn)者處合并變更起意。