簡體   English   中英

`hg pull --rebase`類似於`svn update`嗎?

[英]Is `hg pull --rebase` analogous to `svn update`?

這個問題假定團隊成員有一個“有福的”中央存儲庫

  1. 克隆自
  2. 當他們有他們希望其他團隊成員看到的貢獻時,推動他們
  3. 當他們想要看到其他人的貢獻時拉出來。
  4. 等等

如果是這樣,我會認為hg updatesvn update不相似(為什么會有兩個命令完全相同?)。 從我可以收集到的, hg update更像svn revert 那是對的嗎?

更新:

我對rebase的理解主要基於本頁的“常見案例”部分:
https://www.mercurial-scm.org/wiki/RebaseProject

正如其他人所指出的,差不多但並不完全。 為了減少與svn update相似性(並且增加對一般DVCS的遵從性,特別是Mercurial,最佳實踐[1]):

  1. hg pull -u (或hg pull然后是hg update ),您的更改未提交,並且自上次提取后沒有提交更改。 這與你可以得到的svn update接近,但DVCS的做法非常糟糕。 DVCS的一個細節是你可以在嘗試將它們與其他人合並之前提交你的更改,從而有一個備份版本來回滾並重試失敗的合並,這種做法就是這樣。 不要這樣做。

  2. 提交更改后的hg pull --rebase 這會拉動上游更改,在其上重新應用更改,並允許您將更改作為線性歷史記錄推回。 最終結果看起來與Subversion修訂歷史非常相似,但您可以在合並之前獲得DVCS提交的好處。 我不知道這種操作模式的安全性如何在Mercurial和Git之間進行比較; 在Git中,你的更改的pre-rebase版本仍然存在,直到你執行git gc ,但Mercurial沒有明確的gc安全網。

  3. hg pull后跟hg merge你已經提交到本地副本的更改。 這是執行svn update功能模擬的傳統Mercurial實踐,盡管下面的腳注1。 這會產生非線性版本歷史記錄,但會跟蹤和檢查所有更改。

也就是說,以自己的方式思考Mercurial(以及其他DVCS)並沒有嘗試從Subversion / CVS風格的思維轉換。

  1. 如果你不是重寫 - 歷史 - 保持線性的思想學派。 如果你是,那么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的端到端工作流程如下所示:

  1. A會對某些更改進行hg commit
  2. A hg push將它們推向中央存儲庫。
  3. B則hg pull從中央存儲庫將他們拉進自己的克隆。
  4. B執行hg update以更新其工作副本以反映拉入其克隆的更改。

在沒有中央存儲庫的系統中,它看起來像這樣:

  1. A會對某些更改進行hg commit
  2. 已經克隆了A的回購的B,想要那些改變,因此直接從A的回購中獲取hg pull
  3. B使用hg update將其工作副本hg update為更改。

此外,相當於svn reverthg revert :)

hg pull --update

將等同於svn update

如本SO問題所述

hg命令pushpull在存儲庫之間進行更改,並且updatecommit會在工作副本和本地存儲庫之間移動更改。

所以在DVCS中,你有2個概念而不是1個概念:

  • 本地回購(拉/推)
  • 工作目錄(這是SVN回購“尖端”的唯一本地表示)

這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM