【问题标题】:When does svn BASE become equal to the HEADsvn BASE 什么时候等于 HEAD
【发布时间】:2010-10-19 01:42:25
【问题描述】:

我对 svn 中的 BASE 版本有疑问。我知道这是上次运行更新时项目的原始版本,并且 svn diff 和 status 基本上针对此版本运行。 BASE 什么时候更新?运行更新时它会更新到 HEAD 吗?即使更新期间发生冲突,这是否总是正确的?如果发生冲突,BASE 有什么?它是否仍然具有我上次更新的版本(在导致冲突的最近更新之前)或者即使发生冲突也会更新到 HEAD?
此外,当 svn commit 运行时,我假设 BASE 使用我的本地更改进行更新,此时 BASE、HEAD 和我的本地副本都相同?前提是提交成功。

【问题讨论】:

    标签: svn


    【解决方案1】:

    BASE 是存储库中存在的工作副本的修订版。换句话说,您的修订没有您所做的更改。所以如果你svn update一个文件或文件夹到HEAD,那么BASE和HEAD是相等的。

    当发生冲突时,BASE 将成为与您的工作副本冲突的提交之前的修订版。

    在一个项目上运行 svn info 以查看它的基本版本。

    Revision Specifiers

    【讨论】:

      【解决方案2】:

      查看日志时这很重要,因为没有 url 的 svn log 显示您的 BASE 日志,但使用 url 显示您的 HEAD 日志,这就是为什么我总是使用“svn log -rHEAD:1”来查看所有更改。

      【讨论】:

        【解决方案3】:

        理论:成功递归更新或切换所有文件的基本版本后成为头。在提交或部分更新之后,某些文件可能处于 HEAD 修订版,但只有在没有跳过文件的更新之后,您才能确定所有文件都处于同一版本。 (跳过的原因是未版本化的障碍或冲突)。

        但是,你为什么需要知道这个。 Subversion 应该在内部知道这一点,但在大多数情况下,这种知识对用户来说并不重要。 (当文件过期时,Subversion 会自动警告您)。

        据我所知,您真正需要确保自己处于稳定版本的唯一时间是,当您从工作副本创建分支时。

        【讨论】:

        • 我只是想弄清楚 svn 的工作原理及其实现细节。感谢您的回复。
        【解决方案4】:

        HEAD 是存储库中的最新版本。 BASE 是您从存储库中获得的最后一个修订版。成功提交或更新后它们是相同的。

        当您进行更改时,您的文件与 BASE 副本不同。当您还原时,它们会返回匹配 BASE 修订版。当您遇到冲突时,您不会更新存储库。相反,您的文件仍被视为“正在编辑”,就好像您正在进行更改一样。解决冲突后,您实际上已经决定了最终文件的外观,然后像往常一样提交它们。因此,冲突就像是特殊编辑的情况。

        【讨论】:

        • 在更新之后它们是相同的,但是很短暂,尽管不一定在提交之后。考虑目录和“混合修订工作副本”。
        • 显然创建这些“混合修订工作副本”——这意味着您可以在不完全了解正在发生的事情的情况下创建提交——是“Subversion 的基本规则”之一的结果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 2012-12-29
        • 2021-01-19
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        相关资源
        最近更新 更多