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

如何签出配置文件并使用mercurial重命名它?,mercurial,hgrc,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 f

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


克隆操作没有文档化的挂钩,因为克隆时会创建一个新的存储库。因为这个repo是全新的,所以它没有.hgrc文件来定义钩子。也就是说,您运行的钩子是来自新存储库的钩子,而不是旧存储库的钩子。

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


克隆操作没有文档化的挂钩,因为克隆时会创建一个新的存储库。因为这个repo是全新的,所以它没有.hgrc文件来定义钩子。也就是说,您运行的钩子是来自新存储库的钩子,而不是旧存储库的钩子。

一种方法是定义一个钩子,在该钩子中,您在克隆之后立即执行复制。
唯一的问题是:如中所述,该钩子不会以硬链接路径运行。

一种方法是定义一个,在该方法中,您将在克隆之后立即执行复制。
唯一的问题是:如中所述,该钩子无法使用硬链接路径运行。

您可以使用钩子运行,但您会发现它比创建一个清晰的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 user dir,所以您可能会说所有的克隆都在一台机器上,在这种情况下,这是一个很好的选择。然而,在一个更加分散的环境中,你又回到了让每个人手动在他们自己的~/.hgrc中安装你想要的钩子,在这一点上,你最好让他们自己复制

一个值得考虑的想法是检查解释config.ini文件的任何东西是否有一个include-like指令?然后,您可以将克隆下来的config.ini如下所示:

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

在这种情况下,根本不需要副本。例如,Mercurial确实有一个include指令,其工作原理与此类似:

您可以使用钩子来完成,但您会发现它比创建一个清晰的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 user dir,所以您可能会说所有的克隆都在一台机器上,在这种情况下,这是一个很好的选择。然而,在一个更加分散的环境中,你又回到了让每个人手动在他们自己的~/.hgrc中安装你想要的钩子,在这一点上,你最好让他们自己复制

一个值得考虑的想法是检查解释config.ini文件的任何东西是否有一个include-like指令?然后,您可以将克隆下来的config.ini如下所示:

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

在这种情况下,根本不需要副本。例如,Mercurial确实有一个include指令,其工作原理与此类似:

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

rm /home/configs/config.ini
ln /home/me/repo1/config.ini /home/configs/config.ini
请注意,不必删除克隆并重新克隆即可更新工作副本。只需使用hg pull和hg update即可。

听起来像是你在玩游戏 st需要硬链接该文件,以便每次在/home/me/repo1中运行hg update时,/home/configs中的文件也会更新:

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

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

你好,保罗。这正是我想要做的-从/home/configs/config.ini复制config.ini文件-但直接在克隆上-而不必手动执行cp。我正在查找挂钩,但找不到克隆操作的挂钩。那么你的建议是什么?我宁愿避免手动复制东西。嗨,保罗。这正是我想要做的-从/home/configs/config.ini复制config.ini文件-但直接在克隆上-而不必手动执行cp。我正在查找挂钩,但找不到克隆操作的挂钩。那么你的建议是什么?我更愿意避免手动复制内容。但这不会在克隆后运行,根据定义,当您有一个新存储库时,根本没有设置任何挂钩。但这不会在克隆后运行,根据定义,当您有一个新存储库时,根本没有设置任何挂钩。