【问题标题】:Basic Subversion questions基本颠覆问题
【发布时间】:2010-05-16 08:51:41
【问题描述】:

我刚刚开始使用 subversion,并阅读了官方文档(svn 书)、备忘单和一些指南。我知道如何安装 subversion(在 linux 中),创建存储库(svnadmin create),并将我的 Eclipse 项目导入存储库(SVN 导入),查看存储库文件(使用 svn list)。

但我无法理解其他一些术语。例如,在将我的 Eclipse 项目导入新创建的存储库后,我对我的 Eclipse 项目(超过 1 个文件)进行了更改。现在,我应该如何使用对我的 Eclipse 项目所做的添加文件/更改来更新存储库?

svn update 命令将存储库中的更改带入您的工作副本 - 这与我想要的相反,即将我在 Eclipse 项目中所做的更改带入存储库中先前导入的项目中。如果我是正确的,您更新存储库的频率(随着您不断扩展项目实施)比您当前的项目(更新)。

另外,我不明白你什么时候会使用 svn merge。 svn book 声明它将两个来源之间的差异应用于工作副本。有没有一种情况可以解释这一点?

最后,我可以将多个项目签入存储库吗?还是为每个项目创建一个新的存储库更好?

【问题讨论】:

    标签: eclipse svn


    【解决方案1】:
    1. 您要查找的术语是“提交”。

    2. Subversion 不会专门锁定文件以进行编辑(尽管如果您真的非常想这样做,有一个命令可以这样做)。因此,您可能需要合并两个不同用户对文件的编辑集,甚至是来自计算机上两个不同位置的两个不同工作副本的编辑。

    3. 多个项目都可以。恕我直言,最好的方法是存储库/项目/主干等,而不是存储库/主干/项目。

    【讨论】:

    • repository/project/trunk 的问题是人们开始添加依赖于你的项目的项目,然后你不能原子地检查它们。是的,这发生在我身上。
    【解决方案2】:

    关于SVN你应该知道的三件事:

    1. Trunk - 代码的主要版本
    2. 标签 - 代码的“标记”版本(即 v1.2.5-release)
    3. 分支 - 用于不同开发路径的代码分支。我们通常会 fork 新的分支来处理不同的版本,所以如果当前版本是 1.2.4,你会为 1.3 的开发分支。因此,如果需要对 1.2 进行紧急更改(即 1.2.5),您可以对其进行处理,而不必担心在 1.3 分支中添加重构/功能会破坏什么。 merge 操作 旨在让您在准备好发布 1.3 或类似操作时将 1.3 的分支合并回主干。您还可以合并单个文件(如果两个或多个开发人员同时编辑同一个文件,现在您需要将更改“合并”到同一个文件中。

    您的存储库中的每个项目都应该有 3 个文件夹:

    1. /trunk
    2. /branches
    3. /tags

    这些包含上述三点。您不必拥有这些文件夹,但您应该。其他更成熟的 VCS,如 Mericual/Git,将 tagsbranches 的概念融入系统。在 SVN 中,这些更像是一种约定/建议。

    术语

    • 工作副本 - 硬盘上的副本,包含您的所有编辑等...
    • 添加 - 注册文件以在版本控制中进行跟踪
    • 更新 - 使用 server repository 的更改更新 working copy
    • 提交 - 使用来自 working copy 的更改更新 server repository
    • 切换 - 将 working copy 替换为 server repository 中的另一个文件夹
    • Diff - 对两个文件/文件版本进行差异分析以查看它们之间的变化。
    • 合并 - 尝试将一个或多个文件的更改应用到另一个文件中,突出显示冲突。
    • 补丁 - 一组可用于更新文件的差异。

    【讨论】:

      【解决方案3】:

      commit 更改了存储库

      当您需要维护存储库的两个分支时,合并很有用。例如 v1.x 具有最新的安全修复和 alpha 版本 2。这允许您在 1.x 代码中进行修复,并为现有客户生成二进制文件,您可以将更改合并到版本 2 中以便修复尚未发现的错误。

      【讨论】:

        【解决方案4】:

        我建议您四处寻找“典型的 svn 工作流程”。他们将为您提供“最常见任务”的总体情况。

        您要做的是将对文件所做的更改“提交”到存储库。

        如果发生冲突(当 2 人或更多人在一个项目上工作并提交到同一个 repo 时,可能会出现冲突),您需要合并。

        查看关于 SVN kai 的可用文章记得阅读有关 SVN 的示例/典型工作流程或工作场景。

        【讨论】:

          【解决方案5】:

          完全同意 David,但就问题 3 而言,我个人会区分用例:

          1. 生产:每个存储库一个项目。并且对提到的标签/主干/分支概念感到温暖,它真的很有帮助

          2. 测试:我有一个存储库,其中几乎所有我的实验代码(大约 10 种语言,每种语言有 x 个代码)。原因是:一个实验代码需要我 1-2 分钟,在远程主机上创建一个存储库,使用 ssh-security 有时需要更长的时间;-)

          干杯 艾尔

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多