我第一次使用svn来维护Wordpress的自定义版本。我在eclipse中使用subclipse插件。现在是将最新版本的Wordpress中的更改与我的自定义代码库合并的时候了。 我尝试创建一个分支并在那里添加新的Wordpress版本,然后执行合并。但是没有改变。 有人可以指导我完成这样的项目设置吗?我担心我遗漏了一些基本的东西。 感谢。
答案 0 :(得分:2)
这假设您将从 branch
(包含最新版本的Wordpress)合并到 trunk
(您的自定义代码库)。
(确保您已将所需的所有内容提交到branch
。)
Team --> Switch to another branch/tag/revision...
您的工作副本到trunk
(合并操作的目标),解决出现的任何冲突在这一点上。
Team --> Merge
会打开一个对话框,您将在其中执行合并操作。将“发件人”网址更改为引用branch
(合并操作的来源,即您要合并到工作副本中的内容)。 “From Revision”应指向您希望合并操作“开始”的branch
中的修订版 - 通常是上次从branch
合并到trunk
的修订版(或大多数)如果您真的想合并branch
中的最新更改,可能是您的案例中的主要修订版。
将“To Revision”设置为指向branch
(=头部修订版)中的最新修订版。
此时您已准备好执行合并 - Dry run
命令可让您预览合并期间会发生的情况,Merge
将执行实际合并。
合并操作完成后,您需要确保对您的工作副本执行的所有更改都正常,并解决所有冲突。
完成解决冲突并查看更改后,请在单个提交操作中将更改提交到trunk
。为了您自己的方便,强烈建议您添加一个提交消息,您可以在其中明确说明此提交的用途(=将修订从X到Y从branch
合并到trunk
,目的是什么,等)。
希望这有帮助。
答案 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