2010-08-23 37 views
0

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

回答

1

转换WordPress的项目卖主分支程序

如果您正在使用SVN的第一次,我想你还没有开始用干净的WordPress的副本,从那里支和编辑的分支版本,是吗?;)

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


背景

与“正规的diff” SVN合并不比较左侧码/文件夹右侧的代码/文件夹。 虽然svn合并如果没有找到历史记录可能会回落到类似diff的机制,但我不建议依赖它,因为它可能非常容易出现不必要的冲突。

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

图片,这是wordpress。画家,你的svn指挥它。树是你的修改。现在以日落为主题的图片是更新的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. 

方式现在到了招部分 滚动回你的“老 - 修改 - 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,并且现在重现之间在我的旧的分支的所有更改他们在我的新分支。“

如果一切正常,你应该有两个相同的分支。旧的修改和新的修改,略有不同,新修改与您的“/ vendor/wordpress/current”分支有着坚实的历史。

这个祖先可以让你contunously做到以下几点:

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

+0

感谢Cristoph为您的清晰解释。你总结得很好。这本身就很有用,因为我现在知道如何设置未来的项目。我会根据您的指示来整理当前的项目,但您的概述特别有用。 – Lemmy 2010-10-26 16:16:38

2

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

  1. (请确保你犯你需要为branch一切。)

  2. Team --> Switch to another branch/tag/revision...你的工作副本trunk(该目标的合并操作的),并决心而来的任何冲突在这一点上增加

  3. Team --> Merge打开一个对话框,您将在其中执行合并操作。将“From”URL更改为引用branch(合并操作的,即要合并到工作副本中的内容)。 “从修订”应该指向branch的修订版本,您希望合并操作从“开始” - 通常是上一次合并的修订版本,从branchtrunk(或者最有可能是您的案例的头版修订,如果您真的想要合并刚刚在branch中的最新更改)。

  4. 将“修改”设置为指向branch(=修订版本)中的最新修订版。

  5. 此时您已准备好执行合并 - 使用Dry run命令可以预览合并过程中将发生的情况,并且Merge将执行实际合并。

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

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

希望这会有所帮助。

+1

这真的很有用Tommi。我会尝试并报告回去...... – Lemmy 2010-09-13 11:38:31

+0

很高兴听到这个消息。如果这个答案恰好解决了您的问题,请将其标记为正确的答案 - 这就是本网站的工作方式。谢谢。 – Tommi 2010-09-14 05:24:29

+0

您在步骤#3和步骤#4中都提到了分支,因此生成的合并不会是此方案的预期结果。按照Subclipse帮助标题为“合并两棵不同的树”的说明,因此,步骤#3应改为如下所示: 3.Team - > Merge将打开一个对话框,您将在其中执行合并操作。将“From”URL更改为引用** trunk **(合并操作的起点)。 “从修订版”应该指向您希望合并操作从**开始的主干中的修订。 – michaelok 2012-04-06 13:55:43