如何在不访问svn服务器的情况下应用更改

问题描述:

我们使用svn开发大型Web应用程序,并且定期更新产品。生产服务器无法访问svn(出于安全原因)。如何在不访问svn服务器的情况下应用更改

自上次发布新版本以来推出更改的最佳方式是什么?我们希望避免每次重新创建整个站点,因为它非常大。

+0

我不明白如何将释放到生产服务器的问题连接到版本控制问题。你能详细说明吗? – cdonner 2010-05-26 20:19:17

+0

看我是否明白。您在计算机A上执行SVN更新,然后将整个站点目录复制到生产计算机。你只想复制通过这个SVN更新而改变的东西,从而避免复制整个目录。是吗? – 2010-05-26 20:21:42

+0

如果生产服务器连接到svn服务器,我们只需在生产服务器上执行svn update。但它没有连接。 – JoelFan 2010-05-26 20:21:43

那么让我来一个镜头。您可以解析SVN更新命令输出并生成只复制已更改文件的复制指令?

http://svnbook.red-bean.com/en/1.1/ch03s05.html

让我们看一下SVN更新 的输出多一点。当服务器发送 改变你的工作拷贝,一个字母旁显示的每个项目 代码 让你知道什么样的行动颠覆 执行,使你的工作副本 了最新:

U foo

文件foo被更新(从服务器接收到 更改)。

A foo

文件或目录foo的加入 你的工作副本。

D foo

文件或目录foo和 从您的工作副本中删除。

R foo

文件或目录foo和 替换你的工作拷贝; 是,foo被删除,并添加了具有相同名称的新项目 。虽然 它们可能具有相同的名称,但 存储库认为它们是具有不同对象的 历史记录。

G foo

文件foo接收到来自仓库的新变化 ,但该文件的本地副本 有你 修改。要么改变没有 没有相交,或变化是 完全一样,当地 修改,所以Subversion有 成功合并版本库的 变成文件没有 问题。

C foo

文件foo接收的冲突从服务器 变化。来自服务器的更改 直接覆盖您对文件所做的更改 。虽然没有必要 恐慌。这个重叠需要 由人类(你)解决;我们 在这个 章节后面讨论这种情况。

或者,如果你愿意,你可以使用一个diff工具,如WinMergeAraxis Merge同步两个目录半手动解决方案。

编辑:

我不认为 “SVN更新”,将工作完全,但我对解决是:

  • SVN 当前(旧)督促修订结账
  • SVN 开关的修订是准备正式版(新)

我写了一个脚本来捕获“开关”的输出。它将U和A操作转换为“添加”到zip压缩文件。它将D操作转换为删除要在生产服务器上执行的命令。在生产服务器上,我们只需解压存档并运行删除命令。

+0

如何在更新之前设置工作目录? – JoelFan 2010-05-26 20:28:11

+0

只是'cd'那里做'svn update'。 $ SVN更新 一个NEWDIR更新到版本32 – 2010-05-26 20:32:31

+0

这将有没有更新,因为它是开发目录/ toggle.c 一个NEWDIR/disclose.c 一个NEWDIR/launch.c d NEWDIR/README ! – JoelFan 2010-05-26 20:33:40

对您玻璃墙侧面的目录结帐,使其可从生产服务器访问。使用某种差异/同步实用程序来同步两者,减去_svn文件夹或任何其他文件,这些文件可能会污染生产环境。

或者使用带有“自mm/dd/yyyy以后的变化”的文件的zip(或其他存档),并将其应用于prodution目录。

+0

你能提供更多关于使用什么工具的细节吗? – JoelFan 2010-05-26 20:24:28

+0

@Joel在Windows上的unixoids或'robocopy'上试试'rsync'。两者都可以将一个目录同步到另一个目录,同时只传送已更改的文件。 – 2010-05-26 20:35:49

+0

unix unix很受欢迎,我试图让它工作一次......我认为它也适用于Windows。我想你可以在CYGWin中使用Unison或rsync。 SecondCopy for Windows。 您可以在Windows上使用BeyondCompare,手动执行此操作(如果您不确定是否知道自己在做什么,则有用)。 Windows上的FileBoss。 有很多这些东西。 – 2010-05-26 20:50:57