假设我有一个包含来自多个用户的代码的git存储库,但其中一些不符合缩进指南并使用空格而不是制表符。改变这一点很容易,但是通过清理他们的代码,"A", "B", "C - "D"", "E,F", "G,H,I", 5, 6, 2135231
变得不那么有用,因为那时我会被其他人的代码指责。
我已经看到可以使用相应的标志指定提交的作者和日期,但是这个解决方案对我来说并不理想,因为我必须迭代用户并依次更改每个用户的缩进。我还必须找出更改行的原始提交日期才能使用git blame
标志。
我也知道--date
忽略了这样的空格更改,但我想让更改透明化。每当我git blame -w
时,我发现使用-w
会很麻烦。 (作为旁注,我怀疑其他人会记得在从blame
中提取信息时使用该标志。)如果更改与空格无关(例如,与单个引号交换),这种方法也将被破坏。双引号)。
是否可以更改git 中的跟踪文件而不被视为更改行的作者,理想情况下,不更改原始提交的日期?
答案 0 :(得分:1)
我还没有测试过这个核心 git 功能,但无论如何,在这个答案的后半部分,我说一个非常不同的策略 (GitLens),我已经很好地测试了......
Git 2.23 版推出了一项可以满足您需求的功能。您可以指定一个包含要忽略的提交列表的文件,在执行 git blame 时。
步骤:
可选奖励步骤:阅读某人在 that 文章中发表的评论,该文章说如何获取 GitLens 的 VS Code 扩展名以关注该文件列出要忽略的提交。永远不要再在命令行上使用 git blame
,只需使用 GitLens 的 git 历史记录工具。
"gitlens.blame.ignoreWhitespace": true,
设置/行放入您的 .vscode/settings.json
文件中。 (该文件用于为该项目工作的每个人设置 vscode。)答案 1 :(得分:0)
git filter-branch
命令家族将重写历史记录,并且默认情况下它们会保留原始时间戳和作者。
以下命令将为您提供在当前提交中修改的文件:
git diff --no-renames --diff-filter=AM HEAD^
如果您有“可重入”脚本,则可以将此列表提供给该脚本:
# let's say you save this script in file /tmp/cleanup-head.sh :
git diff --no-renames --diff-filter=AM HEAD^ | xargs reindent
您现在可以将cleanup-head.sh
用作“索引过滤器”的操作:
git filter-branch --index-filter '/tmp/cleanup-head.sh && git add -u' <branch1> <branch2> ...