3

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

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

  • 我想对我所在的任何工作副本使用相同的本地 url(不想要多个站点 - 懒惰、书签、维护。)
  • 我不想在分支中提交未完成的工作,以便我可以切换到主干五分钟。
  • 我正在使用颠覆,所以我没有 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 似乎可以解决所有问题,但我的脑海中响起了警钟。

这是对符号链接的合理使用,还是我只是为将来解决问题?

4

1 回答 1

3

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

直到我意识到符号链接库中存在严重问题。好吧,更改每个人都受益的源代码。20 hudson 构建之后,你开始想,啊,是的,这不是一个好主意,如果 4 年前的项目使用符号链接失败了怎么办......

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

全心全意,不,从长远来看,使用符号链接并不是一个好主意,是的,应该响起警钟。

有哪些替代方案?

仍然使用符号链接,我将为每个唯一项目分支链接库并引用它们。这仍然意味着链接库,并且当您在分支和主干之间切换时也会产生令人头疼的问题。到了我刚刚完全删除符号链接的地步。

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

我的场景不使用 Appache,所以我没有任何帮助,但通常使用符号链接,特别是在 SVN 中,应该远离项目工作。

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

编辑 2

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

>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,或者使用不同的端口、虚拟主机(我不太熟悉)。

于 2012-08-19T12:04:39.503 回答