我有一个用于GUI的配置文件“ Gui.cfg”,如下所示:
GROUP camera
gui.drivers.CameraGui 1 (,,,,)
gui.drivers.CameraGui 2 (,,,,)
当我打开GUI和Camera 1或Camera 2元素时,“ Gui.cfg”会更改并添加窗口大小,例如
GROUP camera
gui.drivers.CameraGui 1 (25,0,430,477,0)
gui.drivers.CameraGui 2 (393,6,426,473,0)
有什么办法告诉git,括号中的这些更改会被忽略,而其他所有更改都不会吗?
我已经阅读了一些有关gitattributes和过滤器的信息,但没有找到如何使它解决我的问题的方法。
答案 0 :(得分:3)
Filters使您能够完全按照自己的意愿去做,因此您处在正确的轨道上。
事实证明,您可以编写自己的过滤器以在提交/签出时在文件中进行替换。这些被称为“干净”和“污迹”过滤器。
您想要的是clean
文件的Gui.cfg
过滤器,它将替换与该模式匹配的所有行:
gui.drivers.CameraGui <anynumber> (<anycharacter>)
使用
gui.drivers.CameraGui <matchednumber> (,,,,)
在提交文件之前。
由于clean
筛选器仅在暂存匹配文件之前运行 ,因此具有“撤消”窗口大小修改的效果,同时仍然允许对窗口大小进行任何其他更改。文件。
让我们先告诉Git我们想通过名为Gui.cfg
的过滤器来运行undoCameraWindowSize
文件,方法是将此行添加到.gitattributes
:
Gui.cfg filter=undoCameraWindowSize
然后,我们实现undoCameraWindowSize
过滤器,通过将其定义为clean
过滤器来告诉Git我们希望在暂存文件之前运行它:
git config --global filter.undoCameraWindowSize.clean 'sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui \1 (,,,,)/"'
在这里,我们使用sed
运行正则表达式,并将匹配的文本替换为另一个字符串。
命令本身是:
sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui \1 (,,,,)/"
请注意我们如何使用捕获组 ([0-9]+)
来匹配摄像机编号,然后使用\1
在替换字符串中引用该摄像机编号。