git 中是否有可能仅忽略文件中的特定更改,例如数字?
Is there a possibility in git to ignore only specific changes within a file, e.g. numbers?
我有一个用于 GUI 的配置文件 "Gui.cfg",如下所示:
GROUP camera
gui.drivers.CameraGui 1 (,,,,)
gui.drivers.CameraGui 2 (,,,,)
当我打开 GUI 和元素 Camera 1 或 Camera 2 时,"Gui.cfg" 会更改并添加 window 大小,例如
GROUP camera
gui.drivers.CameraGui 1 (25,0,430,477,0)
gui.drivers.CameraGui 2 (393,6,426,473,0)
有什么方法可以告诉git,括号中的这些变化被忽略,而其他所有变化都没有?
我已经阅读了一些关于 git 属性和过滤器的内容,但没有找到如何让它解决我的问题。
Filters 使您能够完全按照自己的意愿行事,所以您走在了正确的轨道上。
It turns out that you can write your own filters for doing substitutions in files on commit/checkout. These are called “clean” and “smudge” filters.
您想要的是 Gui.cfg
文件的 clean
过滤器,它将替换匹配此模式的任何行:
gui.drivers.CameraGui <anynumber> (<anycharacter>)
和
gui.drivers.CameraGui <matchednumber> (,,,,)
提交文件之前。
由于 clean
过滤器 运行 恰好 在匹配文件暂存 之前,这将具有 "undoing" window 大小修改,同时仍然允许文件中的任何其他更改。
让我们首先告诉 Git 我们想通过名为 undoCameraWindowSize
的过滤器 运行 Gui.cfg
文件,方法是将此行添加到 .gitattributes
:
Gui.cfg filter=undoCameraWindowSize
然后,我们实现 undoCameraWindowSize
过滤器 和 告诉 Git 我们希望 运行 它在文件暂存之前通过定义它作为 clean
过滤器:
git config --global filter.undoCameraWindowSize.clean 'sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui (,,,,)/"'
在这里,我们使用 sed
到 运行 正则表达式,并将匹配的文本替换为另一个字符串。
命令本身是:
sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui (,,,,)/"
注意我们如何使用 捕获组 ([0-9]+)
来匹配摄像机编号,然后我们在替换字符串中使用
引用它。
我有一个用于 GUI 的配置文件 "Gui.cfg",如下所示:
GROUP camera
gui.drivers.CameraGui 1 (,,,,)
gui.drivers.CameraGui 2 (,,,,)
当我打开 GUI 和元素 Camera 1 或 Camera 2 时,"Gui.cfg" 会更改并添加 window 大小,例如
GROUP camera
gui.drivers.CameraGui 1 (25,0,430,477,0)
gui.drivers.CameraGui 2 (393,6,426,473,0)
有什么方法可以告诉git,括号中的这些变化被忽略,而其他所有变化都没有?
我已经阅读了一些关于 git 属性和过滤器的内容,但没有找到如何让它解决我的问题。
Filters 使您能够完全按照自己的意愿行事,所以您走在了正确的轨道上。
It turns out that you can write your own filters for doing substitutions in files on commit/checkout. These are called “clean” and “smudge” filters.
您想要的是 Gui.cfg
文件的 clean
过滤器,它将替换匹配此模式的任何行:
gui.drivers.CameraGui <anynumber> (<anycharacter>)
和
gui.drivers.CameraGui <matchednumber> (,,,,)
提交文件之前。
由于 clean
过滤器 运行 恰好 在匹配文件暂存 之前,这将具有 "undoing" window 大小修改,同时仍然允许文件中的任何其他更改。
让我们首先告诉 Git 我们想通过名为 undoCameraWindowSize
的过滤器 运行 Gui.cfg
文件,方法是将此行添加到 .gitattributes
:
Gui.cfg filter=undoCameraWindowSize
然后,我们实现 undoCameraWindowSize
过滤器 和 告诉 Git 我们希望 运行 它在文件暂存之前通过定义它作为 clean
过滤器:
git config --global filter.undoCameraWindowSize.clean 'sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui (,,,,)/"'
在这里,我们使用 sed
到 运行 正则表达式,并将匹配的文本替换为另一个字符串。
命令本身是:
sed -E "s/gui\.drivers\.CameraGui\s([0-9]+)\s\(.*\)/gui.drivers.CameraGui (,,,,)/"
注意我们如何使用 捕获组 ([0-9]+)
来匹配摄像机编号,然后我们在替换字符串中使用 引用它。