我如何才能使文件名添加通配符

时间:2019-01-09 01:40:09

标签: mercurial tortoisehg hgignore

我们正在研究一个项目,在该项目中会编译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或其他扩展名...

1 个答案:

答案 0 :(得分:2)

VCS必须跟踪文件的状态。这些确实是新文件。有人可以说这些是重命名的旧文件-可以由VCS记录。

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

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

  2. 具有一个预提交钩子,该钩子可遍历* .js文件并通过适当的正则表达式 .js移至* .js,从而省略了散列代码,从而有效地覆盖了通用文件名新生成的哈希文件名。