svn checkout和svn update之间的区别

时间:2017-03-03 15:58:03

标签: svn version-control

我使用svn部署了一个应用程序。现在我已经做了一些更改,我想运行svn update以更新我的应用程序。

弹出svn update个错误后弹出。但是,当我删除所有文件(包括.svn文件夹)并执行svn checkout [repourl]时,没有错误。

我的问题是svn updatesvn checkout [repourl]在这种情况下有什么区别?为什么检出修订版100有效,但是从修订版50更新到修订版100产品错误。

如果您需要其他信息,请告诉我,我试着保持简短。

我看过Subversion - What are the differences between the SVN checkout and SVN update commands?,但这并没有帮我找到答案。

1 个答案:

答案 0 :(得分:0)

为了更好地理解,我们可以通过两个逻辑步骤中断[SVNBook]: svn checkout

  • 设置(初始化)工作副本 WC ):从服务器下载 svn元数据(我将去解释如下)
  • 执行svn update

[SVNBook]: svn update从服务器下载(如果没有另行说明)最新状态(称为 revision - 这是一个通过每次修改都会增加的数字)的存储库(基于 svn元数据)。它还将更新 svn元数据

这就是为什么svn checkoutsvn co)仅使用一次(在开始时),并且从那里开始后续的 WC 更新通过{{1 (svn update)。

由于svn up创建(覆盖) svn元数据,然后更新 WC ,它将始终成功,但由于外部因素(用户)可能会从创建的那一刻起弄乱元数据,因此发生svn co(或任何其他 svn 命令) ,svn up可能会失败。

svn元数据

  • 位于 WC 根文件夹下的 .svn 文件夹中(旧版本在 WC 中的每个文件夹下都保留了一个此类文件夹) - 这是凌乱的)。删除(或搞乱) .svn 文件夹糟糕的主意,基本上您的 WC 将无效;在这种情况下,svn up是恢复的唯一方法
  • 包含 svn 在各种操作中使用的数据:
    • 服务器网址 - 运行与服务器一起使用的 svn 命令时(例如svn co),您不必指定它(与svn up一样)因为它从元数据中获取它
    • 修订历史记录 - WC
    • 中每个文件/文件夹发生的所有修改
    • 修订号 - 最后一次更改/修订"已下载"从服务器(同时服务器可以在修订版中提前,因为其他人进行了更改)
    • 文件/文件夹数据 - 在下面说明

您的 WC 包含文件夹树(包含文件夹和文件)。所有那棵树也被复制了#34;在 svn元数据 .svn 文件夹)中 - 这就是它占用这么多空间的原因。因此,如果您修改 WC 中的某个源文件,然后在其上执行svn cosvn status), svn 将会检测到更改和svn st将显示它们(以 diff 格式)和,而不连接到 svn 服务器。此外,显示文件随时间(svn diff)遭受的所有修改都不需要连接到服务器。

我认为现在为什么svn log"总是"成功。关于" 运行svn更新错误后弹出",没有关于错误的详细信息,我无法告诉您更多信息。我想到了可能导致错误的两种情况:

  • 您修改了 WC 中的文件(或更多)。其他人修改了相同的文件(大致在相同的行上),并将其更改上传(svn co)到 svn 服务器。当您svn commit时, svn 不知道如何组合这些更改(他们和您的更改),因此需要用户干预。这是不是错误,而是冲突并经常发生(如果许多人在同一区域工作)。需要解决冲突(两组更改合并一起),确保保留两个功能。
  • svn 操作期间(例如svn up), svn 进程异常终止:例如 Ctrl + C ^ C )或 ^ Break WC 处于错误状态(锁定)状态。不允许进一步操作直到它恢复正常(svn up)。