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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何签出配置文件并使用mercurial重命名?相关的知识,希望对你有一定的参考价值。

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

谢谢,马丁

答案

这样做的首选方法是跟踪一个名为config.ini.example的文件,然后将其复制到config.ini,并在config.ini文件中包含.hgignore。您还可以使应用程序在首次运行时生成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用户目录,听起来你可能正在讨论单个机器上的所有克隆,这种情况对你来说这是一个很好的选择。然而,在一个更分散的环境中,你又回到让每个人手动在你自己的~/.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

另一答案

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

另一答案

听起来你只需要硬链接文件,这样每次你在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

以上是关于如何签出配置文件并使用mercurial重命名?的主要内容,如果未能解决你的问题,请参考以下文章

处理重命名:svn vs. git vs. mercurial

在 Git 和 Mercurial 中重命名:准确性和自动化

当远程分支在 Git 中重命名时,如何更新我的本地引用?

禁用 Git 重命名检测

在 Maven 中 - 如何根据正在使用的配置文件的名称重命名输出 .war 文件

如何使用 VBScript 重命名文件?