我怎样才能让 mercurial 为文件名添加通配符

How can i make mercurial to add wildcard for file name

我们正在开发一个项目,其中编译了 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 或其他一些扩展吗...

VCS 应跟踪文件的状态。这些确实是新文件。可以争辩说那些是重命名的旧文件 - 可以由 VCS 记录。

所以我看到了两种解决方案:

  1. 记录将旧文件名移动到新文件名。 hg addremove --similarity XX 在这里可能会有很大帮助。这将导致所有文件每次都具有新名称 - 但如果相似性足够好,它会很好地工作。您可能需要调整 XX 以获得最适合您的相似性度量 (0 ... 100)。添加 --dry-run 用于测试目的可能会使测试变得容易。不过,您需要先删除旧文件 运行 hg addremove

  2. 有一个预提交挂钩,它遍历 *.js 文件并通过适当的正则表达式 ..js 移动到 *.js 省略哈希代码,有效地用新生成的散列文件名覆盖通用文件名。