为实时站点设置 SVN,包含两个客户端和一个服务器

为实时站点设置 SVN,包含两个客户端和一个服务器

我与一位客户合作,他拥有一台基于 Linux 的专用 Plesk 服务器。该网站(例如example.com)是实时的,由于通常需要进行大量修改,因此很难让它们直接在实时上运行。该服务器没有 SVN,只有 FTP。

我创建了一个子域staging.example.com并通过 FTP 将文件放在那里,这样客户端就可以在将文件发布之前看到修改。不用说,记住与每个任务相关的每个文件、上传并在暂存区进行测试,然后再次回忆文件是什么并在实时服务器上再次执行这些操作,对我来说是一件非常痛苦的事情。我曾多次“成功失败”地完美地做到这一点。

我现在想使用 SVN。我已经设法使用 SSH(我拥有它的完全访问权限)和存储库(在/var/www/vhosts/example.com/svn/repos)安装了 SVN,但进一步的设置对我来说似乎不明确。我希望设置如下:

  1. SVN 服务器(正在运行svn.example.com- 已完成)
  2. 'master' 副本位于staging.example.com,位于/var/www/vhosts/example.com/staging(不确定 'master' 在 SVN 中是否有某些特定含义。我只是指主要副本)
  3. 工作目录位于www.example.com,以便/var/www/vhosts/example.com/httpdocs我可以通过 svn update 使更改生效
  4. 我的计算机上的另一个工作目录,我将在这里进行实际工作。

我的计划是在我的计算机上进行工作,提交它以便在临时环境中进行测试,如果一切正常,则从实时站点进行更新以使我的更改生效。

请指导我如何实现这一点。另请注意,我是一名程序员,而不是系统管理员,所以我的计划可能存在一些问题。如果您认为是这样,请指出替代解决方案。我已经使用 SVN 很长时间了,但那只是 checkout-commit-update-resolve,没有设置。这就是我现在需要帮助的原因。

答案1

最简单的解决方案可能就是在三个地方检出代码(只检出主干,不检出分支等)。然后你只需要确保在正确的时间在正确的文件夹中执行“svn up”即可。

因此,请尝试以下步骤(评论描述了每个位)。

#SSH to the server as a user who can modify /var/www/vhosts/...
...

cd /var/www/vhosts/ # Since this is a live server, we need to make the
                    # changeover fast, so work in a new folder. 
mkdir example.com_svn # Make the new folder
cd example.com_svn
svn co http://example.com/svn/repos/website staging # Check out the repository 
                                                    # into a new folder called
                                                    # "staging".(Change "website"
                                                    # to your folder name)
svn co http://example.com/svn/repos httpdocs # Ditto, but "httpdocs"

# At this point you need to make the file permissions and ownership the same as
# the folders within the /var/www/vhosts/example.com.
# Once you've done that continue...

cd ..
mkdir example.com_old
mv example.com/staging example.com_old/. && mv example.com_svn/staging example.com/.   
 # This will make the svn version of the staging site live. Check that it works
 # then do the same with the httpdocs folders.

更复杂的解决方案是使用两个代码分支,一个用于暂存,另一个用于实时。但这可能有点过头了……

答案2

ed 答案的扩展版本

前言

您必须掌握一些 Subversion 管理技能,才能让一切正常运行,并了解底层流程

你必须有:

  • 一个存储库
  • 存储库中至少有两个分支( feSTAGINGLIVE
  • 带有嵌入式业务逻辑的提交后挂钩“在 STAGE 或 LIVE 目标上发布”
  • 三个四个工作副本: DEV(您的本地工作区,绑定到 STAGING 分支)、 MERGE(您的本地工作区,绑定到 LIVE 分支)、 STAGING(在 STAGING 服务器上,绑定到 STAGING 分支)、 LIVE(在 LIVE 服务器上,绑定到 LIVE 分支)
  • 在 STAGING 和 LIVE 上安装 SVN 客户端

工作流程:

  • 在 DEV 中编辑代码
  • 提交 - 提交后钩子将更新 STAGING 上的 WC
  • 在 STAING 上测试更改
  • 将 STAGING 分支的变更合并到 MERGE WC(已测试)/有效地从 STAGING 分支合并到 LIVE 分支/
  • svnlook log | grep KEYWORD提交 LIVE 分支更改 - 提交后钩子将使用合并的更改更新 LIVE 上的 WC(钩子可以通过提交消息中的关键字/ / 或 LIVE 分支中的更改检测此类提交/ svnlook dirs-changed/)

笔记

你可以使用 FTP 或 scp ,而不是服务器上的 WC ssh & svn up- 更少的 Subversion,更新网站带来的麻烦更多(删除的文件将不是通过 FTP|scp 删除并且共同的过程对我来说似乎更复杂)

相关内容