git - 如何在不修改 git 历史记录的情况下对源代码运行代码格式化程序?

标签 git formatting git-filter-branch prettier

我正在尝试使用代码格式化工具格式化整个存储库。这样做时,我想保留有关谁提交了哪一行的信息,以便像 git blame 这样的命令仍然显示正确的信息。通过这个,我的意思是它应该向作者显示之前编辑过每一行(在格式化之前)。

有 git filter-branch 命令,它允许您从时间开始对 repo 的每个修订运行命令。

git filter-branch --tree-filter '\
  npx prettier --write "src/main/web/app/**/**.{js, jsx}" || \
  echo "Error: no JS files found or invalid syntax"' \
  -- --all

运行它需要很长时间,我真的不在乎过去。我只想在不更改每一行的所有权的情况下格式化主分支。我怎样才能做到这一点?我尝试在末尾使用 rev-list 和其他过滤器类型,但它仍然不起作用。必须有一种方法来格式化代码库,同时保留每一行的作者信息。

最佳答案

你可以让 git blame 忽略某些提交,这些提交只做大量的重新格式化等:

创建一个文件 .git-blame-ignore-revs 如下:

 # Format commit 1 SHA:
 1234af5.....
 # Format commit 2 SHA:
 2e4ac56.....

然后做

git config blame.ignoreRevsFile .git-blame-ignore-revs

,这样您就不必每次使用 git blame 时都使用 --ignore-revs-file 选项。

点赞https://github.com/github/feedback/discussions/5033将该功能添加到 github 的 web blame viewer 中。

关于git - 如何在不修改 git 历史记录的情况下对源代码运行代码格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535185/

相关文章:

Java StyledText,附加不同字体的文本?

git - 将 git 存储库中的一组文件拆分到它们自己的存储库中,保留相关历史记录

git - 在一系列 git 提交中提取对单个文件的更改

git - 禁止关于默认初始分支名称的 git 警告

java - 将 Maven 构建从 Jenkins 发布到 Artifactory

Git 强制使用 HTTPS

java - DecimalFormat 变量组大小

php - 帮助格式化 PHP 中的新闻条目

git - 如何从 'git filter-branch' 获取旧的->新的重写提交 SHA 列表?

git - 如何使用多线程使 git clone 更快?