gpt4 book ai didi

git - 在 KRL(KUKA 机器人语言)项目中使用 git

转载 作者:行者123 更新时间:2023-12-05 00:55:04 24 4
gpt4 key购买 nike

我在我的 KRL 项目中使用 git 时遇到了一些问题,我想知道是否有一些解决方法可以改进我的工作流程。

KRL 是工业 KUKA 机器人的编程语言。它具有类似 Basic-/Pascal 的语法。一个程序由一个或多个模块组成。一个模块由两个文本文件组成,一个用于源代码 (.src),另一个用于声明和定义 (.dat)。

我的第一个问题是,在每个文件中,第一行构建的标题如下所示:

&ACCESS RVO
&REL 175

每个标题行都以 & 开头,对代码没有任何意义。最糟糕的部分是这个标题不断变化。因此,当我将一个文件从机器人 Controller 复制回我的 repo 时,git 指出文件已更改,即使源代码相同。

所以我的第一个问题是:有没有办法通过过滤器或钩子(Hook)来忽略所有以 & 开头的行?

我的第二个问题是 *.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

我依赖于这些值,因为它们存储需要保持持久性的位置和计数器,但我不在我的 repo 中关心它们。不完全是,它们必须在文件和我的仓库中,但 git 不应该在这些行中查找差异。

假设我在我的仓库中创建了一个模块并将这个模块复制到机器人。现在我用机器人执行这个模块并且必须覆盖一个位置值。这会更改相应 *.dat 文件中的值。一切正常,几天后我想实现一个计数器。我不能只将新的整数定义放入本地可用的 *.dat 文件中,因为这样我会覆盖机器人上的位置值。所以我必须首先将 *.dat 文件从机器人 Controller 复制到我的 repo 并在那里定义新变量。但当然 git 向我展示了文件不仅在新行中发生了变化,而且在机器人更改位置等值的行上也发生了变化。这让审核变得更加困难,因为我有很多不断变化的测量值和计数器值。

所以我的第二个问题:有没有办法忽略 = 之后的所有内容,但只在 *.dat 文件中?这应该与 header 中的 & 相同,因此值应该在 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, i.e. gitignore for specific lines of code

关于git - 在 KRL(KUKA 机器人语言)项目中使用 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65419879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com