gpt4 book ai didi

git - 如何让 Git 忽略空格和制表符?

转载 作者:IT王子 更新时间:2023-10-29 01:24:57 30 4
gpt4 key购买 nike

我有一个小型脚本项目,它在一个名为“Droid XX-XX-XX”的目录中包含五个不同的源文件。每次我创建源目录的新备份副本时,我都会将日期放在 X 中。因此,大约有 15 个来自不同日期的不同版本。我想从最早的时候开始将它们中的每一个添加到我的新 Git 存储库中。

但是我遇到了几个问题。

  1. 一个问题是一些文件使用制表符进行缩进,而其他文件使用空格——但 Git 将整行视为不同,即使唯一的区别是制表符与空格的问题。如何让 Git 忽略缩进格式?

  2. 另一个问题是一些文件名没有空格,而另一些文件名之间有空格——但 Git 将它们视为不同的文件。更糟糕的是,有时文件名会无缘无故地更改为不同的名称(例如“PatrolPlan”更改为“Patrol”)。当我添加一组新文件时,我如何告诉 Git 即使文件名不同,它实际上只是某个旧文件的新版本?或者更好的是,我可以将它设置为在发生这种情况时自动检测吗?

  3. 最后一个问题是,在开发过程中的某些时刻,我们将两个源文件 merge 为一个,或将一个源文件拆分为两个——但 Git 不会自动检测相似性并推断出发生了什么。我如何告诉 Git 发生了什么?或者更好的是,如何将其设置为自动检测两个源文件何时 merge 或何时拆分?

我意识到问题 (2) 和 (3) 高度相关。感谢您的帮助!

最佳答案

听起来您需要对开发过程进行更多控制和标准化。提交更改的人应该是修改文件的同一个人。或者至少提交者应该确切地知道发生了什么变化。

仔细检查 git diff 的输出,并使用 -w 标志忽略空格。还有显示一行内差异的选项。请参阅下面的行内差异

请注意,您无法告诉 git 在提交时跳过空间更改。我建议使用 GitX(我更喜欢“brotherbard”分支),它允许您在提交之前以交互方式丢弃帅哥。

提交时使用描述性消息。例如,如果一个文件被分割了,就这么说。使您的提交变小。如果您发现自己编写了很长的提交消息,请将提交分成更小的部分。这样,当您在很长一段时间后检查日志时,更改的内容会更有意义。

一行内的差异

Git 具有在一行中显示“单词”差异的能力。最简单的方法是只使用 git diff --color-words

但是,我喜欢使用 diff.wordRegex 配置自定义“单词”的含义。我也喜欢 plain word-diff 格式,因为它更清楚地显示了差异所在(除了使用颜色外,还在更改周围插入括号)。

命令:

git diff --word-diff=plain

连同我的配置中的这个:

[diff]
wordRegex = [[:alnum:]_]+|[^[:alnum:]_[:space:]]+

此正则表达式将这些视为“单词”:

  • 连续的字母数字和下划线字符串
  • 非字母数字、非下划线和非空格的连续字符串(有利于检测运算符)

您必须拥有最新版本的 git 才能使用 wordRegex。请参阅您的 git-config 手册页以查看是否列出了该选项。

更新

如果您使用 git mv 重命名文件(这比使用其他工具或操作系统重命名更可取),您可以看到 git 正在检测重命名。我强烈建议独立于对文件内容进行任何编辑来提交重命名。那是因为 git 实际上并不存储您重命名的事实——它使用基于文件更改量的试探法来猜测它是否是同一个文件。在重命名提交期间更改得越少越好。

如果你确实稍微改变了文件内容,你可以使用 -C 参数到 git diffgit log 来更努力地检测复制并重命名。添加一个百分比(例如 -C75%)以使 git 对差异更加宽容。百分比表示内容必须有多相似才能被视为匹配。

关于git - 如何让 Git 忽略空格和制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427779/

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