每次运行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
谢谢, 马丁
答案 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 pull
和hg update
。