更新和拉动有什么区别?

时间:2010-12-09 02:17:47

标签: version-control mercurial

有人可以澄清更新命令之间的确切区别吗?

感谢。

4 个答案:

答案 0 :(得分:49)

hg update:http://www.selenic.com/mercurial/hg.1.html#update

  • 将存储库的工作目录(“工作副本”)更新到存储库的指定版本

hg pull:http://www.selenic.com/mercurial/hg.1.html#pull

  • 允许您从远程存储库中进行更改

因此,当您执行hg pull时,您将对.hg下的存储库进行更改。它不会反映在您的工作目录中。

之后,当您执行hg update时,更改会被带到您的工作副本。

Your repo                                 Remote Repo
 \                                        \
  |                hg pull                 |
  |-.hg  <-------------------------------- |-.hg
  |   |  --------------------------------> |
  |  hg update       hg push               |
  |   |                                    |
  |- working folder                        |- working folder

当来自像版本控制系统这样的颠覆时,这是非常常见的混淆。

在subversion中:svn update将更改从中央存储服务器带到您的工作副本

但在DVCS中,您既有本地存储库又有工作副本。因此更新完全相同,但将更改从本地存储库转移到本地工作副本。

答案 1 :(得分:17)

Mercurial是一个分布式版本控制系统,因此您拥有整个仓库历史记录以及您的代码版本(称为“工作副本”)。

pull会对您的本地仓库进行远程更改。

update更改您的工作副本以匹配本地仓库中的最新版本。

因此,如果您克隆远程分支并继续运行更新,则代码不会更改,因为您从未下载远程代码。如果你继续运行pull,那么你的代码就不会改变,因为你从不使用远程代码(将它应用到代码的工作版本)。

答案 2 :(得分:6)

pull命令从父存储库中提取更改,但实际上并未对存储库中的文件进行任何更改。

更新命令用于实际更新存储库中的文件。

参见: https://developer.mozilla.org/en-US/docs/Mercurial_FAQ#What%27s_the_difference_between_hg_pull_and_hg_update.3F

答案 3 :(得分:1)

link中的这张图片可以帮助您理解它:

How Mercurial does it