来自不同位置的相同标签名称会导致问题

时间:2011-04-26 21:55:38

标签: mercurial tags fabric

我正在使用Mercurial和Fabric来部署我的网站。我之前从未使用过Fabric,因此我在网上复制了一个示例fab文件,然后更改了vars以匹配我自己的网站。

以下是代码行:

def prod():
    env.hosts                     = ['kevinburke.webfactional.com']
    env.user                      = 'kevinburke'

def deploy():
    require('hosts'                    , provided_by=[prod])

    local ("hg tag --local --force production")
    local ("hg push --remotecmd /home/kburke/bin/hg")  # this works fine
    run ("cd /my/web/directory; hg update -C production")

,这是从命令行调用的

fab prod deploy

当我是唯一部署网站的人时,这没有任何问题。但最近我添加了两个运行相同fabfile的提交者,当他们尝试部署该站点时,该站点的远程版本不会更新到最新版本 - 它只更新到标记为生产,而不是标记的生产。

我希望它会使用他们的“生产”标签来更新文件。为什么会这样?如何让程序按照我期望的方式运行?

谢谢,凯文

2 个答案:

答案 0 :(得分:2)

您无法发布本地标记。这意味着您的第一步已经在/my/web/directory回购中执行,或者已经有production名为修订版(您可以查看hg tagshg brancheshg bookmarks)。

您可以通过多种方式修复工作流程(按优先顺序排列):

  • 使用通用前缀标记来区分不同的生产修订版本,例如production-23production-42,您可以在生产框中进行解析。
  • 创建一个production分支,其中每个要传递的修订都合并到此分支中。如果你已经有分支机构的经验,我推荐这个。
  • 使用bookmark扩展程序,并创建一个production书签以跟踪已部署的版本。这看起来像您目前想要建立的解决方案。如果要使用书签,则需要在服务器和所有客户端上启用它们,并使用hg push -B production将书签的当前状态推送到服务器。这个过程的一个缺点是你永远不会看到是否有人将其他书签推送到服务器,因为书签的传输会无声地重写服务器上的书签。
  • 使用常规标记来跟踪生产版本。一方面,使用标签进行这种跟踪似乎是错误的,因为标签应该是静态的。另一方面,您可以跟踪哪些修订版在某个时间点存活。但是第一个解决方案可以更好地完成跟踪工作。

答案 1 :(得分:1)

可能是基本的,但是你看到它确实做了什么吗?可能没有发生任何事情,当你运行它时,部署的是你的“生产”标签。

由于hg tag --local表示该标记仅适用于您的本地仓库并且未进行版本控制,因此我无法想到任何其他原因。其他人甚至无法知道标签。