使用符号链接在主干和分支之间切换

时间:2012-08-09 08:58:09

标签: svn lamp symlink

(这个问题在SuperUser为我赢得了一个风滚草徽章,但我建议在这里尝试一下)

我正在LAMP开发服务器上的一个主要分支上工作,但我经常需要对主干进行小的但是紧急的更新。

  • 我想使用相同的本地网址来处理我所处的工作副本(不想要多个网站 - 懒惰,书签,维护。)
  • 我不想在分支机构中完成未完成的工作,以便我可以切换到主干五分钟。
  • 我正在使用subversion,所以我没有相应的git stash。

我正在尝试从符号链接(foo)提供本地站点,然后我可以将其重写为指向分支或主干。这允许我向前和向后切换而不用担心未提交的更改,意味着我可以使用相同的书签,路径别名等

# svn working copies for trunk and branch
/sites/footrunk/
/sites/foobranch/
/sites/foo -> foobranch  #symbolic link

# eg to switch to trunk
cd /sites;
ln -s footrunk foo_tmp && mv -fT foo_tmp foo
cd -; 
sudo service apache2 restart

我的问题是apache在切换后偶尔会立即混淆,并且似乎持有空的,旧的或重复的(不能重新声明php中的类错误?)版本的文件。重新启动apache似乎可以解决所有问题,但是脑子里还有警告声。

这是合理使用符号链接,还是我只是为将来存下问题?

1 个答案:

答案 0 :(得分:3)

我广泛使用符号链接来获取公共库。共享库发生变化,每个项目都会获得最新的代码。我以这种方式管理了许多项目,看起来非常合理。

直到我意识到符号链接库中存在严重问题。好的,改变每个人的好处的源代码。 20哈德森后来建造并且你开始思考啊,是的,这不是一个好主意,如果一个项目4年前,使用符号链接失败了...

我们删除代码中的依赖项,为什么不删除我们的部署环境......

全心全意,不,从长远来看,使用符号链接并不是一个好主意,是的警告应该会消失。

有哪些替代方案?

仍然使用符号链接我将为每个独特项目分支链接库并引用它们。这仍然意味着链接库,当您在分支和中继之间切换时也会产生头痛。它已经到了我刚刚完全删除了符号链接。

我现在有两种方法,第一种是我为库创建一个eclipse库项目,并从我的其他项目中引用它。另一个是我要么创建一个Jar或Swc(flash lib)并直接将它们作为依赖项导入我的项目中。如果项目的源代码发生了变化,那么我可以更新项目或重新导入在哈德森上构建的库。

我的场景不使用Appache,所以我没有帮助,但一般情况下使用符号链接,特别是在SVN中应该远离项目工作。

此外,我认为对符号链接的更改不是版本化的。它们是静态的,您无法跟踪它们的变化。 (如果我在这一点上错了,请纠正我)。如果我是正确的,他们也不会在不同的存储库之间旅行或工作。

修改2

根据评论,也许这可能会有所帮助,当我想从apache服务项目的主干和分支时,我将使用apache别名。当然你可能有uri问题,所以它可能不起作用,但它可以替代尝试。这又完全取决于你的设置(我猜我错过了sym链接如何为你工作)。

>touch /etc/apache2/other/emiles.conf
>pico /etc/apache2/other/emiles.conf

..添加以下内容。

Alias /fooBranch "/Users/emile/fooBranch"
Alias /fooTrunk "/Users/emile/fooTrunk"

<Directory "/Users/emile/fooBranch">
    Options +Indexes +MultiViews +FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
#copy above with "/Users/emile/fooTrunk"

重新启动appache,然后访问两者

http://localhost/fooBranch
or 
http://localhost/fooTrunk 

您甚至可以将localhost设置为仅引用fooTrunk,或者使用不同的端口,虚拟主机(我不熟悉)。