基本的颠覆问题

时间:2010-05-13 16:33:14

标签: eclipse svn

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

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

svn update命令将来自存储库的更改带入您的工作副本 - 这与我想要的相反,即将我在Eclipse项目中所做的更改带入以前导入的存储库项目中。如果我是正确的,您更频繁地更新存储库(当您继续扩展项目实现时)比当前项目(使用更新)更新。

另外,我不明白你什么时候使用svn merge。该svn书指出它将2个来源之间的差异应用于工作副本。有没有可以解释这个的情景?

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

5 个答案:

答案 0 :(得分:5)

  1. 您正在寻找的术语是“提交”。

  2. Subversion并不专门锁定文件进行编辑(尽管有一个命令可以执行此操作,如果你真的,真的很想)。因此,您可能需要在文件上合并两个不同用户的编辑集,甚至可以在计算机上的两个不同位置编辑两个不同的工作副本。

  3. 多个项目都可以。最佳方法IMHO是存储库/项目/主干等,而不是存储库/主干/项目。

答案 1 :(得分:2)

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

  1. Trunk - 代码的主要版本
  2. 标签 - 代码的“标记”版本(即v1.2.5版本)
  3. 分支 - 不同发展路径的代码分叉。我们通常会分支新的分支来处理不同的版本,因此如果当前版本是1.2.4,那么您将分支1.3的开发。因此,如果需要对1.2进行紧急更改(即1.2.5),您可以在不担心1.3分支中的重构/功能添加而损坏您的内容的情况下进行操作。 merge操作的设计使您可以在准备发布1.3或类似操作时将1.3的分支合并回主干。您还可以合并单个文件(如果两个或更多开发人员同时编辑同一个文件,现在您需要将更改'合并'到同一个文件中。
  4. 存储库中的每个项目都应包含3个文件夹:

    1. /trunk
    2. /branches
    3. /tags
    4. 这些包含上述三点。您不必拥有这些文件夹,但应该。其他更成熟的 VCS (如Mericual / Git)将tagsbranches的概念融入系统。在SVN中,这些更像是一种惯例/推荐。

      <强>术语

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

答案 2 :(得分:1)

commit更改了存储库

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

答案 3 :(得分:1)

我建议您四处寻找'典型的svn工作流程'。它们将为您提供“最常见任务”的全貌。

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

如果发生冲突,您需要合并(当有2个或更多人正在处理项目并提交相同的回购时。可能会出现冲突。)

检查有关SVN kai的可用文章,请记得阅读有关SVN的示例/典型工作流程或工作方案。

答案 4 :(得分:1)

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

  1. 生产:每个存储库一个项目。并且通过提到的标签/主干/分支概念变得温暖,它确实有很多帮助

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

  3. 干杯 EL