Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git中是否有可能只忽略文件中的特定更改,例如数字?_Git_Gitattributes - Fatal编程技术网

git中是否有可能只忽略文件中的特定更改,例如数字?

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,

我有一个用于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和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 (,,,,)/"