git中是否有可能只忽略文件中的特定更改,例如数字?
我有一个用于Gui的配置文件“Gui.cfg”,如下所示:git中是否有可能只忽略文件中的特定更改,例如数字?,git,gitattributes,Git,Gitattributes,我有一个用于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,
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和filters的内容,但没有找到解决我问题的方法。使您能够完全按照自己的意愿进行操作,因此您走上了正确的道路
从:
事实证明,您可以编写自己的过滤器,用于在提交/签出时对文件进行替换。这些被称为“干净”和“污迹”过滤器
您需要的是一个用于Gui.cfg
文件的clean
过滤器,它将替换与此模式匹配的任何行:
gui.drivers.CameraGui <anynumber> (<anycharacter>)
然后,我们实现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
引用摄像机编号。gitignore
是一个全有或全无的AFAIK,也就是说,Git跟踪或不跟踪文件。gitignore的可能重复不是一个选项,正如我所希望的那样,所做的更改将显示出来,但括号中的部分除外。问题还在于,每次打开Gui时,括号中的数字可能会改变,因此我需要一个过滤器,如:s/(,,,)/current numbers/和用于清理(current numbers)/(,,,,)
git config --global filter.undoCameraWindowSize.clean 'sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui \1 (,,,,)/"'
sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui \1 (,,,,)/"