[英]Is `hg pull --rebase` analogous to `svn update`?
這個問題假定團隊成員有一個“有福的”中央存儲庫
如果是這樣,我會認為hg update
與svn update
不相似(為什么會有兩個命令完全相同?)。 從我可以收集到的, hg update
更像svn revert
。 那是對的嗎?
更新:
我對rebase的理解主要基於本頁的“常見案例”部分:
https://www.mercurial-scm.org/wiki/RebaseProject
正如其他人所指出的,差不多但並不完全。 為了減少與svn update
相似性(並且增加對一般DVCS的遵從性,特別是Mercurial,最佳實踐[1]):
hg pull -u
(或hg pull
然后是hg update
),您的更改未提交,並且自上次提取后沒有提交更改。 這與你可以得到的svn update
接近,但DVCS的做法非常糟糕。 DVCS的一個細節是你可以在嘗試將它們與其他人合並之前提交你的更改,從而有一個備份版本來回滾並重試失敗的合並,這種做法就是這樣。 不要這樣做。
提交更改后的hg pull --rebase
。 這會拉動上游更改,在其上重新應用更改,並允許您將更改作為線性歷史記錄推回。 最終結果看起來與Subversion修訂歷史非常相似,但您可以在合並之前獲得DVCS提交的好處。 我不知道這種操作模式的安全性如何在Mercurial和Git之間進行比較; 在Git中,你的更改的pre-rebase版本仍然存在,直到你執行git gc
,但Mercurial沒有明確的gc
安全網。
hg pull
后跟hg merge
你已經提交到本地副本的更改。 這是執行svn update
功能模擬的傳統Mercurial實踐,盡管下面的腳注1。 這會產生非線性版本歷史記錄,但會跟蹤和檢查所有更改。
也就是說,以自己的方式思考Mercurial(以及其他DVCS)並沒有嘗試從Subversion / CVS風格的思維轉換。
rebase
可能更適合update
。 Mercurial社區傾向於支持update
。 不完全是。
hg pull
從其他存儲庫中獲取修訂版並將它們添加到存儲庫克隆中的本地可用修訂版,但不更新您的工作副本 - 僅更新您的存儲庫 (對於DCVS,如hg / git / etc不同)作為工作副本的事情)。
hg update
將您的實際工作副本更新到本地存儲庫中的最新版本。
這與Subversion不同,因為在svn中,沒有“本地存儲庫”這樣的東西 - 唯一的存儲庫是服務器上的存儲庫; 你只在本地有一份工作副本。 因此,為什么update
只是一個命令,而不是Mercurial的pull
然后update
。
相當於Mercurial的svn update
將是hg pull --update
,這相當於做hg pull
然后hg update
一個接一個地hg update
。
具有“中央”倉庫的DCVS的端到端工作流程如下所示:
hg commit
。 hg push
將它們推向中央存儲庫。 hg pull
從中央存儲庫將他們拉進自己的克隆。 hg update
以更新其工作副本以反映拉入其克隆的更改。 在沒有中央存儲庫的系統中,它看起來像這樣:
hg commit
。 hg pull
。 hg update
將其工作副本hg update
為更改。 此外,相當於svn revert
是hg revert
。 :)
這是mercurial http://hginit.com/的優秀初學者指南。 應該清楚解釋大部分事情。 從“不要嘗試將svn知識應用於分布式vcs”開始!
命令hg pull --rebase
並不完全類似於 svn update
,但結果可能是相同的。
在Subversion中,如果更新工作副本,則會獲得與任何本地更改合並的存儲庫中的最新更改。 因此,存儲庫中的文件是最新的,但您可能仍然有未提交的更改。
在Mercurial中, hg pull --rebase
將從“中央存儲庫”(或您正在提取的任何存儲庫)獲取最新更改,以更新您的存儲庫,然后隨機提交您的本地提交。 您仍然需要hg update
以使您的工作副本與本地存儲庫相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.