我们很难保持Subversion和FTP同步.有时我们忘记提交更改并将它们推送到Web服务器,我们的.svn文件夹分散在我们的Web服务器中,有些东西存在于一个地方而另一些则不存在,等等.
今天我想花点时间解决这个问题.解决办法是什么?有没有办法将SVN链接到我们的Web服务器,以便我们可以通过FTP提交存储库和Web服务器?我们是否应该向我们的Web主机询问一些能够更好地与SVN存储库同步的其他系统?我们如何强制存储库和Web服务器同步?我们如何删除.svn文件夹?
正如标题所说,我们如何保持SVN存储库和我们的Web服务器同步?
您不希望在没有任何形式的测试的情况下对实时Web服务器进行更改,是吗?
简短回答:通过执行新的结账(最好是在中央服务器上)并仅复制运行应用程序所需的位.
我建议设置连续集成,其中构建服务器负责从Subversion存储库中检索最新的源代码,执行构建并为各种环境准备部署包(测试/暂存),并可能将其FTP到生产中如果您对测试或暂存环境中的已部署更改感到满意,请选择此框.
这是确保必须提交更改的唯一可靠方法(我知道,但在您的方案中似乎不确定),否则他们根本不会在部署中结束.它强制执行良好的发布管理过程,不要忘记您可以将各种其他精彩的自动化内容添加到构建服务器,如单元测试和功能测试.
我在服务器上做的是检查服务器上的代码.
因此,我只是登录到它并运行一个,而不是使用ftp将内容推送到服务器svn up
.通过这种方式手动执行此操作可以获得多种好处,包括在出现错误代码时回滚的功能.
我还建议使用db迁移系统(假设您正在使用数据库).这将允许您轻松回滚数据库模式更改,以确保您的代码将在回滚时继续工作.
将这些与类似于Fabric或Capistrano的工具相结合,将为您提供一个非常强大和强大的部署系统.
关于DVCS的注意事项:
这里的一些人提到使用分布式vcs.其中一些最流行的例子是git和mercurial(还有其他几个).
这两者的使用模式都不同于svn,但这并不直接适用于这个问题.你可以获得的最大收益是,如果你为每次推送到实时服务器做标签,那么与传统的svn标签模式相比,这样做的成本微乎其微.
如果您希望与GitHub和BitBucket中的任何一个过期,它们分别为git和mercurial提供免费存储库托管.
话虽如此,我是使用dvcs的巨大支持者,我的个人偏好是多变的.
Springloops完全符合您的要求.搏一搏.这是SVN与FTP的结合.您处理本地工作副本,然后将更改提交到存储库,然后通过Springloops将选定的修订版本通过FTP部署到任何服务器(暂存或生产).