【问题标题】:How to checkout configuration file and rename it using mercurial?如何签出配置文件并使用 mercurial 重命名它?
【发布时间】:2011-01-29 21:22:39
【问题描述】:

每次我运行 hg clone /home/hg/repo1 而不跟踪它时,如何告诉 mercurial 将文件从 /home/configs/config.ini 复制到我的本地克隆中?

例如

> ls -l /home/hg/repo1
  file_one.py
  file_two.py

> hg clone /home/hg/repo1 /home/me/repo1
> cd /home/me/repo1
> ls -l /home/me/repo1
  file_one.py
  file_two.py
  config.ini

谢谢, 马丁

【问题讨论】:

    标签: mercurial hgrc


    【解决方案1】:

    执行此操作的首选方法是跟踪名为config.ini.example 的文件,然后将其复制到config.ini,并将config.ini 包含在您的.hgignore 文件中。您还可以让您的应用程序在首次运行时生成一个config.ini(如果它尚不存在)。

    克隆操作没有(记录的)钩子,因为当您克隆时,您会创建一个新的存储库。因为这个 repo 是全新的,它没有 .hgrc 文件来定义钩子。也就是说,您运行的钩子是来自 new 存储库的钩子,而不是 old 的。

    【讨论】:

    • 嗨,保罗。这正是我想做的 - 从 /home/configs/config.ini 复制 config.ini 文件 - 但直接克隆 - 无需手动 cp。我正在研究钩子,但找不到用于克隆操作的钩子。
    • 那么你的建议是什么?我宁愿避免手动复制东西。
    【解决方案2】:

    你可以用一个钩子来做,但你会发现它比创建一个清晰的 README.txt 更麻烦。 :)

    钩子看起来像:

    [hooks]
    post-clone = cp -i config.ini.sample config.ini
    

    正如 Paul Fischer 指出的那样,最好使用存储库中的 .sample,而不是使用存储库中的 /home/configs/config.ini

    正如 VonC 指出的那样,问题在于钩子没有复制到克隆上——这是有充分理由的:如果克隆也降低了钩子,那么我会把 post-clone = rm -rf ~ 放在那里真的毁了你的一天。

    因此,如果您打算使用钩子,那么绕过它的方法是将钩子放在回购之外的某个地方。在公司环境中,您可以在所有系统上的/etc/mercurial/hgrc 文件中执行此操作,如果您有良好的 IT 设置,他们可以集中执行此操作。因为听起来您确定会有一个 /home/configs 用户目录,所以听起来您可能正在谈论所有克隆都在一台机器上,在这种情况下,这对您来说是一个不错的选择。但是,在一个更加分散的环境中,您又回到了让每个人在他们自己的~/.hgrc 中手动安装您想要的钩子,此时您不妨让他们自己进行复制。

    一个值得考虑的想法是检查解释您的config.ini 文件的任何东西是否有类似include 的指令?然后你可以让克隆下来的config.ini 看起来像:

    ... some stuff
    %include /home/configs/config.ini
    ... more stuff
    

    在这种情况下,根本不需要复制。例如,Mercurial 确实有一个包含指令,它的工作原理是这样的:http://www.selenic.com/mercurial/hgrc.5.html#syntax

    【讨论】:

      【解决方案3】:

      一种方法是定义一个hook like changegroup,您可以在其中执行克隆后立即复制。
      唯一的问题:如issue 1602 中所报告的那样,该钩子不会使用硬链接路径运行。

      【讨论】:

      • 但这不会在克隆后运行,因为根据定义,您有一个 新存储库,根本没有设置任何挂钩。
      【解决方案4】:

      听起来您只需要硬链接文件,这样每次您在/home/me/repo1 中运行hg update 时,/home/configs 中的文件也会更新:

      rm /home/configs/config.ini
      ln /home/me/repo1/config.ini /home/configs/config.ini
      

      请注意,您不必删除克隆并重新克隆即可更新您的工作副本。只需使用hg pullhg update

      【讨论】:

        猜你喜欢
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多