1

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

4 回答 4

2

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

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

于 2011-01-29T21:40:08.907 回答
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-like 指令?然后你可以有克隆下来的config.ini样子:

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

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

于 2011-01-30T00:53:11.090 回答
1

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

于 2011-01-29T21:45:43.713 回答
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

于 2011-01-30T09:39:42.567 回答