自动接受Mercurial更改块

时间:2016-05-18 09:17:38

标签: mercurial tortoisehg

我有一个非常大的repo,有数千个文件,可以通过我无法控制的自动进程定期更新(这适用于Unity 3D,它的价值)。

例如,如果我将Unity升级到新版本,它将重新导入所有纹理,并可能在数千个.meta文件中添加一行,这些文件对应于先前不存在的新序列化数据。

显然,查看数千个文件非常糟糕。大多数情况下,我可以快速识别出一个特定的差异,并且只想自动检查所有具有相同差异的文件,提交将它们排除在外,并查看剩下的内容:其他差异,我可能不会知道。

例如,我只提交了4000多个包含此差异的文件: enter image description here

所以这种模式很容易找到:

-  textureFormat: -5
+  textureFormat: -1

我想我可以写一个脚本或TortoiseHg工具来做到这一点,我只是不知道从哪里开始。我需要遍历所有已更改的文件/块,匹配模式,提交块...

1 个答案:

答案 0 :(得分:1)

我知道没有工具可以完全按照你的意愿行事。但是我相信为此编写一个小的bash脚本或使用命令行相对容易:

hg diff --nodates --noprefix -U 0 | grep '^+' | grep -v '+++' | sort | uniq -c

将按照出现次数的降序列出当前差异的插入行,因此是最常出现的差异。

使用该列表,您将获得与新插入的模式匹配的文件列表,例如

hg files "set:grep('^ textureFormat: -1')"

应该为您提供具有该模式的所有文件(不管它是否是新的)。您可能想要检查这些文件,无论它们的diff是否包含其他内容:

hg diff "set:grep('^  textureFormat: -1')"

现在你可以使用结果甚至排除单个文件,如果diff输出不适合你:

hg commit "set:grep('^ textureFormat: -1') and not 'unwantedFilename.cpp'"

在上面的命令中,我使用了文件集功能和hg grep接受正则表达式的功能。请查看hg help grephg help filesethg help patterns以获得更深入的解释。