如何使用subclipse合并代码更改?

时间:2010-08-23 10:53:20

标签: eclipse svn wordpress subclipse

我第一次使用svn来维护Wordpress的自定义版本。我在eclipse中使用subclipse插件。现在是将最新版本的Wordpress中的更改与我的自定义代码库合并的时候了。 我尝试创建一个分支并在那里添加新的Wordpress版本,然后执行合并。但是没有改变。 有人可以指导我完成这样的项目设置吗?我担心我遗漏了一些基本的东西。 感谢。

2 个答案:

答案 0 :(得分:2)

这假设您将 branch(包含最新版本的Wordpress)合并到 trunk(您的自定义代码库)。

  1. (确保您已将所需的所有内容提交到branch。)

  2. Team --> Switch to another branch/tag/revision...您的工作副本到trunk(合并操作的目标),解决出现的任何冲突在这一点上。

  3. Team --> Merge会打开一个对话框,您将在其中执行合并操作。将“发件人”网址更改为引用branch(合并操作的来源,即您要合并到工作副本中的内容)。 “From Revision”应指向您希望合并操作“开始”的branch中的修订版 - 通常是上次从branch合并到trunk的修订版(或大多数)如果您真的想合并branch中的最新更改,可能是您的案例中的主要修订版。

  4. 将“To Revision”设置为指向branch(=头部修订版)中的最新修订版。

  5. 此时您已准备好执行合并 - Dry run命令可让您预览合并期间会发生的情况,Merge将执行实际合并。

    < / LI>
  6. 合并操作完成后,您需要确保对您的工作副本执行的所有更改都正常,并解决所有冲突。

  7. 完成解决冲突并查看更改后,请在单个提交操作中将更改提交到trunk。为了您自己的方便,强烈建议您添加一个提交消息,您可以在其中明确说明此提交的用途(=将修订从X到Y从branch合并到trunk,目的是什么,等)。

  8. 希望这有帮助。

答案 1 :(得分:1)

将wordpress项目转换为供应商分支程序

如果您是第一次使用svn我认为您还没有开始使用干净的wordpress副本,从那里分支并编辑分支版本,对吗? ;)

如果是这样,你可能会遇到问题。


<强>背景

与“常规差异”不同,SVN合并不会将右侧代码/文件夹与左侧代码/文件夹进行比较。 虽然如果没有找到历史记录,svn merge可能会回归到类似diff的机制,但我不建议依赖它,因为它很容易发生不必要的冲突。

SVN Merge用于重现已在SVN历史记录中记录的更改。这就像告诉一位画家“嘿,你知道这张照片在你在山上添加树之前是怎么看的吗?那棵树太棒了!看这里我复制了相同的基本画面,但是现在是日落。你能画出同样的画吗树又来了,但是这张照片上有日落?“ 画家可能重现树,因为他知道他是如何做到的。他甚至可能在某个地方有一份草案。

图片,即wordpress。画家,它与你指挥它。这棵树是你修改的。现在以日落为主题的图片是较新的wordpress版本。

你最有可能的是将wordpress香草复制到你的svn中,修改它,使用它。

要坚持图片示例,历史记录将包含“复制整张图片,添加树,添加树叶”等命令。

现在你带来了一个新版本的wordpress,一个新的图片,可以说,并把它放在旧的修改版本之外。问题是,你人类和聪明的人都知道它的相同图片,即使新的版本不同,你只需复制树,SVN就没有这方面的知识。对于SVN,你的wordpress 1.7文件夹(已修改)与wordpress 1.8完全不同。它们没有历史记录,因为SVN日志中没有任何内容表明它。 SVN是一个官僚势利的势利不是吗? ;)

现在人们如何让svn保持wordpress 1.7,修改后的1.7和新1.8之间的历史联系,他们在作品开始时就使用了分支。

因此,您可以在“vanilla-wordpress”文件夹中使用干净的1.7 wordpress开始,将其存储在svn中并将其分支到“my-modified-wp”。在你想要从上游更新wordpress之前,你会被攻击。然后人们下载最新的wordpress副本覆盖他们的vanilla wordpress并合并生成的变更集。

在图片示例中,命令是:

"Buy original picture
copy original picture as my picture
draw tree on my picture
draw sunset on original picture (someone else did that for you, aka update)
*reproduce* sunset on my picture too"

您可以干净地重现日落,因为您知道在应用日落之前图片的外观。

你的问题是,你没有开始关闭,而是立即编辑了你下载的wordpress。所以你的wordpress的新版本不能轻易与你的修改版本相关联。


建立历史关系的一种方法

download the **exact** wordpress version you started your project with
Put it into /vendor/wordpress/current
invoke "svn copy http://svnserver.tld/repositorypath/vendor/wordpress/current http://svnserver.tld/repositorypath/vendor/wordpress/1.7.1" to tag the import.
invoke "svn copy http://svnserver.tld/repositorypath/vendor/wordpress/current http://svnserver.tld/repositorypath/branches/my-new-modified-wordpress" or whatever your project/WP-edition is called.

现在是技巧部分 向后滚动“old-modified-wordpress”的svn日志。你没有分支的那个。您必须在初次导入旧wordpress后找到第一个修订版。一旦找到该修订版,就可以使用它的编号并在这两个命令的第二个中使用它:

change into a local checkout of "/branches/my-new-modified-wordpress"
issue "svn merge -r **4**:HEAD http://svnserver.tld/repositorypath/my-**old**-modified-wordpress". If 4 was the first revision during which you made own modifications.

你告诉svn以下内容:“在我的旧分支中修改版本4和NOW之间的所有更改,然后在我的新分支上重现。”

如果一切顺利,你应该有两个相同的分支。旧修改版和新修改版略有不同,新修改版与您的“/ vendor / wordpress / current”分支具有良好的历史。

这个祖先允许您不情愿地执行以下操作:

Download the wordpress version you wish to upgrade too and **overwrite** /vendor/wordpress/current
invoke "svn copy http://svnserver.tld/repositorypath/vendor/wordpress/current http://svnserver.tld/repositorypath/vendor/wordpress/1.9.3" to tag the new version.
change into local checkout /branches/my-new-modified-wordpress
issue "svn merge http://svnserver.tld/repositorypath/vendor/wordpress/current"
profit

我描述的这个程序在链接上的storystelling较少。但在它可以工作之前,你必须建立分支之间的祖先关系。

Subversion svn:externals file override?

我知道它已经很多了:)。如果您计划进行绘画,请考虑“更改命令”而不是状态,你会没事的。

C