git - 在 KRL(KUKA 机器人语言)项目中使用 git
问题描述
我在我的 KRL 项目中使用 git 时遇到了一些问题,我想知道是否有一些解决方法可以改进我的工作流程。
KRL 是工业 KUKA 机器人的编程语言。它具有类似 Basic-/Pascal 的语法。一个程序由一个或多个模块组成。一个模块由两个文本文件组成,一个用于源代码 ( .src),另一个用于声明和定义 ( .dat)。
我的第一个问题是,在每个文件中,第一行构建的标题如下所示:
&ACCESS RVO
&REL 175
每个标题行都以 & 开头,对代码没有任何意义。最糟糕的部分是这个标题不断变化。因此,当我将一个文件从机器人控制器复制回我的仓库时,git 指出文件已更改,即使源代码相同。
所以我的第一个问题:有没有办法使用过滤器或钩子来忽略所有以 a 开头的行&
?
我的第二个问题是 *.dat 文件不仅用于声明和定义,如类 C 语言中的头文件,而且还用于存储值。这看起来像这样:
DECL E6POS XP1={X 319.710815,Y -488.601227,Z 1364.72363,A -73.5368805,B 88.6439896,C 10.5155058,S 6,T 26,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
INT counter=123
REAL offset=0.123
我依赖这些值,因为它们存储需要保持持久性的位置和计数器,但我不在我的回购中关心它们。不完全是,它们必须在文件和我的仓库中,但 git 不应该在这些行中寻找差异。
所以假设我在我的仓库中创建了一个模块并将这个模块复制到机器人。现在我用机器人执行这个模块并且必须覆盖一个位置值。这会更改相应 *.dat 文件中的值。一切正常,几天后我想实现一个计数器。我不能只将新的整数定义放入本地可用的 *.dat 文件中,因为这样我会覆盖机器人上的位置值。所以我必须首先将 *.dat 文件从机器人控制器复制到我的 repo 并在那里定义新变量。但当然 git 向我展示了文件不仅在新行中发生了变化,而且在机器人更改位置等值的行上也发生了变化。这使得审查变得更加困难,因为我有很多不断变化的测量值和计数器值。
所以对于我的第二个问题:有没有办法忽略=
*.dat 文件之后的所有内容?这应该与来自标头的工作相同&
,因此值应该在 repo 中,但我不关心这些值的任何差异。
解决方案
使用过滤器可以忽略这些行。
假设我们在 /scripts/krl_filter.sh 上有一个过滤器:
sed -e '/\&ACCESS/d' -e '/\&REL/d' -e '/\&PARAM/d' -e '/\&COMMENT/d'
我们将过滤器设置为 /.git/config
[filter "krl"]
clean = $PWD/scripts/krl_filter.sh
smudge = cat
required = true
我们将其应用于 KRL 文件 .gitattributes
*.src filter=krl
*.dat filter=krl
*.sub filter=krl
也许您会在提交标题行之前看到已更改,但是一旦进行更改或以其他方式进行更改,就会应用过滤器
*对于 .dat 文件,您可以使用如下过滤器:
sed -e 's/=[^=]*$/=/'
有关在 git 中忽略行的更多信息,请查看: How to tell git to ignore individual lines, ie gitignore for specific lines of code
推荐阅读
- regex - 如何将文本文件中的字符串作为标记变量提取到电子表格中
- c++ - 如何处理非 default_constructible tyname 变量
- python - 如果您按屏幕上的任意位置,则会显示消息
- javascript - 带有提示的随机密码生成器
- c# - 我们可以将静态成员变量传递给构造函数来解决统一问题吗?
- c# - Google.Apis.Auth 1.46.0.0 已安装,但随后被要求提供多个版本
- r - RMarkdown 没有编译成 PDF
- r - 如何使用一种颜色创建微生物群数据的条形图以获得更高的分类等级和渐变颜色
- c++ - 使用 boost/asio 从网页获取特定数据
- compiler-construction - 编译器如何实现类型别名?