Mercurial 自动接受多变的更改块
我有一个非常大的repo,有数千个文件,可以通过我无法控制的自动过程定期更新(这是为了Unity 3D,为了它的价值) 例如,如果我将Unity升级到新版本,它将重新导入所有纹理,并可能在数千个.meta文件中添加一行,这些文件对应于以前不存在的新序列化数据 显然,审查成千上万的文件是可怕的。不过,大多数时候,我可以快速识别一个特定的差异,我只想自动检查所有具有相同差异的文件,并将它们排除在外,然后查看剩下的内容:我可能不知道的其他差异 例如,我刚刚提交了4000多个文件,其中包含以下差异: 因此,模式很容易找到:Mercurial 自动接受多变的更改块,mercurial,tortoisehg,Mercurial,Tortoisehg,我有一个非常大的repo,有数千个文件,可以通过我无法控制的自动过程定期更新(这是为了Unity 3D,为了它的价值) 例如,如果我将Unity升级到新版本,它将重新导入所有纹理,并可能在数千个.meta文件中添加一行,这些文件对应于以前不存在的新序列化数据 显然,审查成千上万的文件是可怕的。不过,大多数时候,我可以快速识别一个特定的差异,我只想自动检查所有具有相同差异的文件,并将它们排除在外,然后查看剩下的内容:我可能不知道的其他差异 例如,我刚刚提交了4000多个文件,其中包含以下差异:
- textureFormat: -5
+ textureFormat: -1
我想我可以写一个脚本,或者一个乌龟工具来完成,我只是不知道从哪里开始。我需要迭代所有更改的文件/块,匹配一个模式,提交块…我知道没有工具可以完全满足您的要求。但是,我相信为这样的应用程序编写一个小型bash脚本或使用命令行相对容易:
hg diff --nodates --noprefix -U 0 | grep '^+' | grep -v '+++' | sort | uniq -c
将按出现次数的降序列出当前差异的插入行,因此最常出现的差异将排在第一位
例如,通过该列表,您可以获得与新插入的模式匹配的文件列表
hg files "set:grep('^ textureFormat: -1')"
应该为您提供具有该模式的所有文件(尽管它是新的还是不新的)。您可能希望检查这些文件,看看它们的差异是否包含其他内容:
hg diff "set:grep('^ textureFormat: -1')"
现在,如果diff输出不适合您,您可以利用结果,甚至排除单个文件:
hg commit "set:grep('^ textureFormat: -1') and not 'unwantedFilename.cpp'"
在上面的命令中,我使用了文件集功能和接受正则表达式的hg grep
。查看hg-help-grep
、hg-help-fileset
和hg-help-patterns
以获得更深入的解释