gpt4 book ai didi

git - git 中的自定义行结尾(LF 和 CR+LF 除外)

转载 作者:太空狗 更新时间:2023-10-29 14:29:03 25 4
gpt4 key购买 nike

我被聘为顾问,与糟糕的内部人员一起工作 DSL被一家大公司使用。

我说糟糕是因为代码行不是用回车符或换行符来结束每行代码,而是用五个字符的 ASCII 字符串 <EOL> 分隔的。 .这些文件有数千“行”长。任何嵌入的回车符或换行符往往会使解释器崩溃。

我无法更改他们的解释器或语言,但我需要使用用这种语言编写的庞大(>100 MB)代码库。

在对这段代码进行任何更改之前,我想将其放入一个 git 存储库中以进行跟踪。有没有办法告诉 git 字符串 <EOL>表示行尾,就像您可以指定 LF 一样或 CR+LFcore.eol=lf ?例如,core.eol="<EOL>" .如果是这样,这将使我的生活在两个方面变得更轻松:

  1. 它将使 merge 和差异智能地工作; git 会知道“线”在哪里。
  2. 我可以(例如)使用 <EOL> 检查原始代码作为行尾,然后在另一台机器上使用 core.eol=lf 检查它set,git 会自动来回转换。 (我可以使用常规文本编辑器和常规工具!)

我确实认识到这是一个小众的边缘案例。我也知道我可以添加一个中间处理步骤来在与 git 交互之前来回转换,但我想避免这种情况,除非绝对必要,因为我更愿意将他们现有的代码库直接导入 git 而无需先对其进行预处理。

如果此功能不可用,我什至更愿意创建自定义版本的 git 而不是添加额外的处理步骤,因此如果有人知道其中可能涉及哪些复杂性,我将有兴趣了解这些。

最佳答案

此自定义过滤器设置将导致 *.dsl包含 <EOL> 的文件在 Git 存储中,但是 \n在您的工作目录中 checkout 时。 git diff等工具将在 checkout 版本上运行(例如 \n )。这是你想要的吗?

~/.gitconfig.git/config

[filter "crazy-eol"]
clean = awk 'BEGIN{ORS="<EOL>"}1'
smudge = awk 'BEGIN{RS="<EOL>"}1'
[diff "crazy-eol"]
textconv = awk 'BEGIN{RS="<EOL>"}1'

.gitattributes.git/info/attributes

*.dsl filter=crazy-eol diff=crazy-eol

关于git - git 中的自定义行结尾(LF 和 CR+LF 除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058263/

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