Mercurial - 如何停止跟踪已修改的文件,但保留存储库中的第一个版本

时间:2010-04-21 05:35:25

标签: mercurial makefile

我用源代码树创建了hg存储库。我想在存储库中保留一些文件的第一个版本,例如Makefile,然后即使我修改它也不会看到它被修改。

原始问题是./configure通常会修改Makefile,但我不希望构建文件在存储库中提交。所以我想在存储库中只保留configure和Makefile的第一个版本,这样克隆我的存储库的每个人都可以自己运行./configure而不会打扰存储库

我尝试了hg removehg forget,但这些都是停止跟踪,并删除了下一版修订中的文件。

.hgignore也没有这样做。

我每次运行hg revert时都会想到./configure或者说,但这不是有效的方法。 有没有更好的方法?

2 个答案:

答案 0 :(得分:2)

它通常很好的形式跟踪configure脚本。这有一些原因:

  • 它巨大。我见过代码库,配置脚本和帮助器宏库的大小是正在编译的实际代码的十倍以上。

  • 当其他开发人员对configure.in(.ac)进行更改时,他们将需要提交一个新的configure脚本。如果有三个人这样做,那么Mercurial很有可能要求至少其中一个人手动解决configure本身的合并冲突。请记住,configure是机器生成的,尝试阅读它(更不用说解决合并冲突)可能会让你的眼睛流血。

通常,您将通过两种方法提供源代码形式的程序:

  • 下载发布档案(例如foo-1.2.3-rc2.zip),这可以包含配置脚本。

  • 使用Mercurial直接下载存储库。如果他们想要使用它,他们需要安装autoconf。

在我的存储库的根目录中,我通常包含一个名为autogen.sh的文件,该文件运行所需的所有步骤(aclocalautoconf,...),它们也处理警报用户是否需要安装某些东西。即Could not find tool aclocal, please install the autoconf package.

最好只使用autogen.sh方法。这意味着只跟踪configure.in(或configure.ac)和相关的Makefile(来自Makefile.in)。让每个构建配置自己的构建,并提供distclean目标以删除生成的所有文件configure。最后,提供一个maintainer-clean目标来删除配置套件自身生成的任何内容,例如configure

这应该有助于使夜间构建变得容易。

答案 1 :(得分:0)

您可以尝试设置一个预提交挂钩,如果在更改集中找到,它将始终恢复原始Makefile内容。
SO question说明了要提交的变更集的内容。

请务必use the pre-commit hooknot precommit