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

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

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

我尝试了hg remove或hg忘记但是那些是停止跟踪并且还删除了下一版本的reporitory中的文件.

.hgignore也不做这件事.

我想hg每次运行时都会恢复./configure或make,但这不是有效的方法.
有没有更好的方法?

最佳答案 它通常很好的形式,根本不跟踪配置脚本.这有一些原因:

>它的巨大.我见过代码库,配置脚本和帮助器宏库的大小是正在编译的实际代码的十倍.
>当其他开发人员对configure.in(.ac)进行更改时,他们将需要提交新的配置脚本.如果有三个人这样做,那么Mercurial很可能会要求其中至少有一个人手动解决配置本身的合并冲突.请记住,配置是机器生成的,尝试读取它(更不用说解决合并冲突)可能会让你的眼睛流血.

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

>下载发行档案(例如foo-1.2.3-rc2.zip),这可以包含配置脚本.
>使用Mercurial直接下载存储库.如果他们想要使用它,他们将需要安装autoconf.

在我的存储库的根目录中,我通常包含一个名为autogen.sh的文件,该文件运行所需的所有步骤(aclocal,autoconf,…),如果需要安装某些内容,它还会处理警告用户.即找不到工具aclocal,请安装autoconf包.

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

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

点赞