我如何"滥用"指责(或者一些更适合的函数,和/或与shell命令结合使用)来统计存在来自每个提交者的存储库中当前有多少行(代码)?
示例输出:
Committer 1: 8046 Lines
Committer 2: 4378 Lines
Run Code Online (Sandbox Code Playgroud) 我们有一个包含大约500,000行代码的项目,使用git进行管理,其中大部分已经使用了几年.我们即将进行一系列修改,以使旧代码符合开发人员社区的当前标准和最佳实践,包括命名约定,异常处理,缩进等.
你可以把它想象成漂亮的印刷和低级/机械重构之间的东西.
这个过程很可能触及代码库中的几乎所有代码行(~85%),并且一些行将受到多达五次修改.所有更改都旨在在语义上保持中立.
我使用perl脚本修改php git存储库中的所有制表符并将它们全部更改为4个空格.
$ find -iname \*.php -exec perl -pi -e "s/\t/ /g" {} \
Run Code Online (Sandbox Code Playgroud)
我可以提交这个更改git commit,但它会在我提交之后将我标记为内部所有更改行的作者git blame.
有没有办法实现这个大规模的改变,不会让我成为改变行的作者,但保留原作者?这是我们在项目中并不想丢失的很多历史.
我们用4个空格替换制表符的目的不是为了使git责备中的东西看起来不同,而是遵循适当的PEAR编码标准.例如没有标签,使用4个空格进行缩进.
我正在尝试使用代码格式化工具格式化整个 repo。这样做时,我想保留有关谁提交了哪一行的信息,以便像这样的命令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
Run Code Online (Sandbox Code Playgroud)
运行它需要很长时间,而且我真的不在乎过去。我只想在不更改每一行的所有权的情况下格式化 master 分支。我怎样才能做到这一点?我尝试使用rev-list最后的和其他过滤器类型,但它仍然不起作用。必须有一种方法来格式化代码库,同时保留每一行的作者信息。
git ×4
formatting ×1
git-blame ×1
git-commit ×1
indentation ×1
prettier ×1
pretty-print ×1
refactoring ×1