实现Web开发的版本控制

时间:2010-09-09 16:57:45

标签: svn version-control

随着我的项目越来越大,我正试图进入版本控制。目前我的开发是这样的:

  • 我有在线托管的“实时”版本
  • 我有本地版本,以及本地网络服务器
  • 我编辑本地版本并在我的本地网络服务器上进行测试
  • 最后,我将运行Unison来更新我的本地版本的实时版本(以及更新我的本地版本以及对实时版本的任何更改)

我的本​​地平台是 Gentoo,Linux 。我看了一下SVN,但我认为它可能不适合我的需求,因为我的本地网络服务器(和Unison)只能访问当前检出的代码,依此类推。我可能错了,但我对此并不太了解。

有人可以指导我对现有代码设置某种版本控制,这会导致本地网络服务器可以访问最新版本,并且不会破坏未编辑文件的访问时间吗? (我不希望每当我做出更改时,Unison都会上传每个文件)

4 个答案:

答案 0 :(得分:2)

我为此使用了subversion,效果很好。

通常我会发展,直到我有一些东西被清理干净。

此时,我将创建一个名为release-的分支。我将跳转到生产系统并查看我新创建的分支。对于几个项目,我将有一个在生产系统上运行的临时区域。

例如,我可能有一个如下所示的目录树:

/web/sites/release-1
/web/sites/release-2
/web/sites/release-3
/web/sites/release-4
/web/sites/stage ==> release-4
/web/sites/live ==> release-3

“stage”和“live”是符号链接,也是Apache为DocumentRoot for virtualhosts www.example.com和stage.example.com提供的内容)

此设置允许我在实际生产环境中非常仔细地测试,然后通过交换符号链接进行切换。

通过在部署之前进行分支,我可以在极少数情况下对生产进行紧急修复。然后,只要方便和适当,我就可以将这些更改合并回主干。

最后一个提示:如果在生产环境中使用subversion项目的工作副本,则需要让apache不允许人们浏览项目中的.svn目录:

在httpd.conf中:

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>

答案 1 :(得分:0)

这是我目前的设置,我相信你可以做类似的事情:

我使用SVN,它托管在主服务器上。有两个服务器,开发和生产。我在开发服务器上的结帐时进行所有工作编辑,然后当更改准备好上线时,我提交它们,然后更新生产服务器上的结账,这是现场网站。

答案 2 :(得分:0)

Mercurial样式:

> cd ~/code
> hg init
> hg add *
> hg commit -m "Initial checkin"

这将为您提供一个有效的mercurial存储库。阅读链接以获取有关如何使用它的更多信息。

您可以从本地Web服务器和实时Web服务器进行克隆,以保持最新状态。

答案 3 :(得分:0)

扩展@Nathon的答案。你想做的事:

cd ~/code # this is where your code lives now
# set your local webserver to run from *this* directory
hg init
hg add *
hg commit -m "Initial checkin"
hg clone ~/code ~/staging
cd ~/staging
# set Unison to run from *this* directory

在〜/ code中进行开发,使用本地服务器进行检查。随时随地提交。当你得到有效的东西时,标记它。然后做:

cd ~/staging
hg pull
hg update your-tag-name
# run unison.

我的印象是你也希望你的本地服务器从暂存区域运行,但这似乎是一个坏主意,因为你想用它来检查你的工作。如果你想要一种QA环境,你可以从登台运行第二个网络服务器,但我只会这样做,而不是优先考虑开发。