我一直在谷歌和SO寻找一个问过这个问题的人,但我现在完全是空的.我会提前为这个冗长的回答方式道歉.(如果我能够弄清楚如何封装问题,也许我会成功找到答案.)
如果构建/编译行为生成数百个临时文件以创建最终结果,那么Mercurial中如何管理大型项目? 是.hgignore的唯一答案吗?
示例场景:
您有一个项目想要使用某些开源包来实现某些功能,并且需要从源代码编译.所以你去拿包裹.un-.tgz然后将其打入自己的Mercurial存储库,以便您可以开始跟踪更改.然后,您进行所有更改,然后运行构建.
您测试最终结果,对结果感到满意并准备好提交回存储库的本地克隆.因此,您hg status在提交前检查您的更改hg status结果会导致您立即开始使用会让您的母亲感到羞耻的所有单词 - 因为您现在拥有"build cruft"的屏幕和屏幕.
为了争论,说这个包是MySQL或Apache:就是这样
哇什么?引起这种焦虑的特定项目将由多个物理位置的多个开发人员处理,因此需要尽可能简单.如果涉及太多,他们就不会这样做,我们手上会有更大的问题.(可悲的是,一些老狗并不热衷于学习新的技巧......)
一个建议的解决方案是他们只需要在做一个make之前在本地提交所有内容,所以他们有一个"干净的平板",然后他们必须克隆到实际进行内置.这被击落为(a)太多步骤,以及(b)不想用一堆"现在建立的时间"改变集来摧毁历史.
其他人已经提出将所有这些内容都提交到Mercurial存储库中.我强烈反对,因为那时下一次这些文件将变为"已修改",因此被包含在变更集的文件列表中.
我们不可能成为遇到这个问题的唯一人.那么"正确"的解决方案是什么?我们唯一的尝试是尝试创建一个大规模智能.hginore文件?这让我感到不安,因为如果我告诉Mercurial"忽略这个目录中的所有内容我还没有告诉你",那么如果下一个应用的补丁将文件添加到该被忽略的目录中会发生什么?(Mercurial永远不会看到那个新文件,对吧?)
希望这不是一个明显答案的完全愚蠢的问题.我以前曾多次从源代码编译过东西,但从来没有需要在其上应用版本控制.另外,我们是Mercurial的新手.