如何签出配置文件并使用mercurial重命名?

时间:2011-01-29 21:22:40

标签: mercurial hgrc

每次运行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

谢谢, 马丁

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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确实有一个include指令,就像那样:http://www.selenic.com/mercurial/hgrc.5.html#syntax

答案 2 :(得分:1)

一种方法是定义hook like changegroup,在克隆之后立即执行复制 唯一的问题是:挂钩不会与硬链接路径一起运行,如issue 1602中所述。

答案 3 :(得分:0)

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

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

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