- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个小型脚本项目,它在一个名为“Droid XX-XX-XX”的目录中包含五个不同的源文件。每次我创建源目录的新备份副本时,我都会将日期放在 X 中。因此,大约有 15 个来自不同日期的不同版本。我想从最早的时候开始将它们中的每一个添加到我的新 Git 存储库中。
但是我遇到了几个问题。
一个问题是一些文件使用制表符进行缩进,而其他文件使用空格——但 Git 将整行视为不同,即使唯一的区别是制表符与空格的问题。如何让 Git 忽略缩进格式?
另一个问题是一些文件名没有空格,而另一些文件名之间有空格——但 Git 将它们视为不同的文件。更糟糕的是,有时文件名会无缘无故地更改为不同的名称(例如“PatrolPlan”更改为“Patrol”)。当我添加一组新文件时,我如何告诉 Git 即使文件名不同,它实际上只是某个旧文件的新版本?或者更好的是,我可以将它设置为在发生这种情况时自动检测吗?
最后一个问题是,在开发过程中的某些时刻,我们将两个源文件 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 diff
和 git log
来更努力地检测复制并重命名。添加一个百分比(例如 -C75%
)以使 git 对差异更加宽容。百分比表示内容必须有多相似才能被视为匹配。
关于git - 如何让 Git 忽略空格和制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427779/
我是一名优秀的程序员,十分优秀!