【问题标题】:Switching between trunk and branch with symbolic links使用符号链接在主干和分支之间切换
【发布时间】:2012-08-06 11:18:03
【问题描述】:

(这个问题在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 似乎可以解决所有问题,但我的脑海中响起了警钟。

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

【问题讨论】:

    标签: svn lamp symlink


    【解决方案1】:

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

    直到我意识到符号链接库中存在严重问题。好吧,更改每个人都受益的源代码。 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,或者使用不同的端口、虚拟主机(我不太熟悉)。

    【讨论】:

    • 谢谢 Emile,但我没有使用符号链接来引用外部资产。每个工作副本都是独立的。只是我想要在使用相同的本地 LAMP 设置时方便地在 2 个工作副本之间切换(可能带有未提交的更改)。
    • 是的,就依赖关系而言,我完全同意“全心全意,不,从长远来看,使用符号链接并不是一个好主意,是的,警告铃声应该响起”
    猜你喜欢
    • 2016-11-23
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多