如何签出配置文件并使用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 pull
和hg update
。
以上是关于如何签出配置文件并使用mercurial重命名?的主要内容,如果未能解决你的问题,请参考以下文章
处理重命名:svn vs. git vs. mercurial
在 Git 和 Mercurial 中重命名:准确性和自动化