我们正在研究一个项目,在该项目中会编译angularjs Web项目并将二进制文件存储在hg repo中。问题是angularjs js文件通常使用散列方式编译所有二进制文件。例如:二进制文件后缀有每个文件的唯一扩展名
main.1cc794c25c00388d81bb.js,
polyfills.eda7b2736c9951cdce19.js,
runtime.a2aefc53e5f0bce023ee.js,
common.7d1522841bf85b01f2e6.js,
1.620807da7415abaeeb47.js,
2.93e8bd3b179a0199a6a3.....etc.
问题是,每次在hg repo中签入新二进制文件时,都会将其检测为新文件并与同名的旧文件一起保留。因此,我需要一种方法来欺骗hg存储库,以保留文件名,但仍将其视为替换前一个文件的旧文件。
main.1cc794c25c00388d81bb.js ==> overwrite old main.js
polyfills.eda7b2736c9951cdce19.js ==> overwrite old polyfill.js
runtime.a2aefc53e5f0bce023ee.js ==> overwrite old polyfill.js
common.7d1522841bf85b01f2e6.js ==> overwrite old commom.js
1.620807da7415abaeeb47.js ==> overwrite old 1.js
2.93e8bd3b179a0199a6a3 ==> overwrite old 2.js
有人能指出一种方法来欺骗hg来考虑这些文件只是对先前文件的修改,而不是对新文件的修改吗? 可以使用hgignore或其他扩展名...
答案 0 :(得分:2)
VCS必须跟踪文件的状态。这些确实是新文件。有人可以说这些是重命名的旧文件-可以由VCS记录。
所以我看到了两种解决方案:
记录将旧文件名移动到新文件名。 hg addremove --similarity XX
在这里可能会大有帮助。这将导致所有文件每次都具有新名称-但如果相似性足够好,它将很好地工作。您可能需要调整XX
才能获得最适合您的相似性度量(0 ... 100)。添加--dry-run
用于测试可能会简化测试。不过,在运行hg addremove
之前,您将需要删除旧文件。
具有一个预提交钩子,该钩子可遍历* .js文件并通过适当的正则表达式。 .js移至* .js,从而省略了散列代码,从而有效地覆盖了通用文件名新生成的哈希文件名。