sla*_*dan 7 git bash case-insensitive git-bash
我正在对 Microsoft Access VBA 代码进行版本控制,该代码通常不区分大小写。然而,变量名的情况在那时(由 Access 编译器或由开发人员)时不时地发生。这通常会导致我的 git 工作区发生巨大变化。
如何还原或忽略仅涉及文件内容大写或小写的更改?
一个例子:
git init
echo "public sub example()\nend sub" > mdlExample.ACM
# ^-- lower e
git add --all
git commit --all --message "Initial Commit"
echo "public sub Example()\nend sub" > mdlExample.ACM
# ^-- upper E
Run Code Online (Sandbox Code Playgroud)
我会喜欢这样的东西:
git restore --only-case-changes # not working
Run Code Online (Sandbox Code Playgroud)
进而:
git status
> On branch master
> nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
考虑更改example="example"为Example="Example". 您如何建议 Git 决定在此处忽略哪个案例更改?现在考虑注释中的代码片段,或存储为代码生成器的字符串。我开始希望 Git 摆脱烦人的琐事,但我认为如果你试着想象一下告诉 Git 你想要什么,你会更好地理解你的问题的上下文。
如何还原或忽略更改,仅涉及文件内容的大写或小写
当您想暂时忽略更改时,当您想在没有看到这些更改的情况下进行差异或责备时,您可以使用“textconv”过滤器来规范化您差异的文本。我使用这些来做一些事情,比如在差异时从生成的 html 中去除嵌入的时间戳,最快的 atm 是
[diff "doc-html"]
textconv = "sed 's,<span class=\"version\">Factorio [0-9.]*</span>,,;s,<[^/>][^>]*>,\\n&,g'"
wordRegex = "<[^>]*\\>|[^< \\t\\n]*"
Run Code Online (Sandbox Code Playgroud)
在.git/config,和
doc-html/*.html diff=doc-html
*.cfg -diff
Run Code Online (Sandbox Code Playgroud)
在.git/info/attributes。
所以我改变了什么差异不会向我展示我不关心的东西。
如果您想查看差异忽略大小写的结果,请尝试
[diff "nocase"]
textconv="tr A-Z a-z"
Run Code Online (Sandbox Code Playgroud)
并将* diff=nocase(或可能*.vba diff=nocase)放入.git/info/attributes. 完成后,将其取出。
但是对于合并,我的引导示例应该让您相信 Git 自动且静默地在 repo 内容中进行大小写更改,即使只是在看起来像标识符的文本中,也是一个坏主意。当发生冲突时,不仅仅是片面的变化,而是两种不同的变化,仍然需要一些人为判断来决定结果应该是什么。幸运的是,使用任何不错的合并工具,解决简单的冲突都在亚秒范围内。
您不需要做git restore任何事情:您可以设置一个干净的内容过滤器驱动程序,如下所示,它将自动将这些情况转换为git diff/ git commit。
这意味着:
图片来自“ ProGit book ”的“ Keyword Expansion ”部分
这是通过以下方式完成的:
.gitattributes器声明,这意味着您只能将其关联到某些文件(例如,通过它们的扩展名)
*.ACM filter=ignoreCase
Run Code Online (Sandbox Code Playgroud)
git config filter.<driver>.clean声明实际脚本(应该在您的PATH)
git config filter.ignoreCase.clean ignoreCase.sh
# that give a .git/config file with:
[filter "ignoreCase"]
clean = ignoreCase.sh
Run Code Online (Sandbox Code Playgroud)
诀窍是:
您能否编写一个脚本,将 ACM 文件的内容作为输入并生成相同的 ACM 文件作为输出,但其字符串已转换?您可以在这些脚本中
包含文件名,这样您就可以进行比较并检测是否需要调整所述差异,但是您仍然需要编写正确的命令,以便在 ACM 文件中的大小写发生变化时仅替换“”字符串。xxx
注意:jthill在注释中建议设置merge.renormalize配置设置,以告诉 Git 存储库中文件的规范表示随着时间的推移而发生变化。
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |