我用源代码树创建了hg存储库。我想在存储库中保留一些文件的第一个版本,例如Makefile
,然后即使我修改它也不会看到它被修改。
原始问题是./configure
通常会修改Makefile
,但我不希望构建文件在存储库中提交。所以我想在存储库中只保留configure和Makefile
的第一个版本,这样克隆我的存储库的每个人都可以自己运行./configure
而不会打扰存储库
我尝试了hg remove
或hg forget
,但这些都是停止跟踪,并删除了下一版修订中的文件。
.hgignore
也没有这样做。
我每次运行hg revert
时都会想到./configure
或者说,但这不是有效的方法。
有没有更好的方法?
答案 0 :(得分:2)
它通常很好的形式不跟踪configure
脚本。这有一些原因:
它巨大。我见过代码库,配置脚本和帮助器宏库的大小是正在编译的实际代码的十倍以上。
当其他开发人员对configure.in(.ac)进行更改时,他们将需要提交一个新的configure
脚本。如果有三个人这样做,那么Mercurial很有可能要求至少其中一个人手动解决configure
本身的合并冲突。请记住,configure
是机器生成的,尝试阅读它(更不用说解决合并冲突)可能会让你的眼睛流血。
通常,您将通过两种方法提供源代码形式的程序:
下载发布档案(例如foo-1.2.3-rc2.zip),这可以包含配置脚本。
使用Mercurial直接下载存储库。如果他们想要使用它,他们需要安装autoconf。
在我的存储库的根目录中,我通常包含一个名为autogen.sh
的文件,该文件运行所需的所有步骤(aclocal
,autoconf
,...),它们也处理警报用户是否需要安装某些东西。即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说明了要提交的变更集的内容。