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

时间:2010-05-26 20:16:59

标签: svn deployment production

我们正在使用svn开发大型Web应用程序,并定期更新生产。生产服务器无权访问svn(出于安全原因)。

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

2 个答案:

答案 0 :(得分:1)

好吧,让我试一试。您可以解析SVN更新命令输出并生成仅复制已更改文件的复制指令吗?

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

  

让我们检查一下svn update的输出   多一点。当服务器发送时   更改您的工作副本,一封信   代码显示在每个项目旁边   让你知道Subversion的动作   执行以带来您的工作副本   先进的日期:

     

U foo

     

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

     

A foo

     

添加了文件或目录foo   到你的工作副本。

     

D foo

     

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

     

R foo

     

文件或目录foo是   替换为您的工作副本;那   是,foo被删除了,还有一个新项目   添加了相同的名称。而   他们可能有相同的名字,   存储库认为它们是   不同的对象   历史。

     

G foo

     

File foo收到了新的更改   从存储库,但你的本地   该文件的副本有你的   修改。要么改变了   没有相交,或者变化了   与您当地人完全一样   修改,所以Subversion有   成功地合并了存储库   更改为文件没有   问题

     

C foo

     

File foo收到了冲突   来自服务器的更改。变化   从服务器直接重叠你的   自己对文件的更改。没有必要   但是恐慌。这种重叠需要   由人(你)解决;我们   在此后面讨论这种情况   章。

或者,如果您更喜欢半手动解决方案,可以使用WinMergeAraxis Merge之类的差异工具来同步两个目录。

修改

我不认为“svn update”会完全正常工作,但我确定的是:

  • svn 结帐当前(旧)产品修订
  • svn 切换到为prod准备的修订版(新)

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

答案 1 :(得分:0)

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

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