8

我们厌倦了掉毛。所以我们想在我们的项目中使用黑色。不幸的是,它几乎改变了我们项目中的每一行,这将使我们失去大部分的作者信息。我们annotate在 pycharm 中使用或git blame很多来确定在查看特定代码片段时与谁交谈。在一次提交中更改大量文件时如何保留这些信息?

编辑:由于这是这个问题的重复,我想把重点放在“尽可能好”的方法上。

让我们假设 lint 提交是由人工(但已知)作者创建的,因此用作标志。那么是否可以创建一个git blame类似的输出,显示自此关键 lint 提交以来的所有作者以及该提交中更改的行的任何先前作者?

我意识到这对于拆分/合并的线路效果不佳,但它至少提供了一种更快的方法来限制潜在人员与 1、2、3 人交谈的范围。

4

2 回答 2

1

来自https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revltrevgt

--ignore-rev

在分配责任时忽略修订所做的更改,就好像更改从未发生过一样。被忽略的提交更改或添加的行将归咎于更改该行或附近行的先前提交。可以多次指定此选项以忽略多个修订。如果设置了 blame.markIgnoredLines 配置选项,则被忽略的提交更改并归因于另一个提交的行将被标记为?在责备输出中。如果设置了 blame.markUnblamableLines 配置选项,那么那些被我们无法归因于另一个修订版的被忽略提交所触及的行将用 * 标记。

如果代码格式化全部在一次提交中完成,我认为您可以使用该标志。--ignore-revs-file如果您想忽略多个提交,还有一个看起来很有用。

于 2021-09-23T00:37:31.937 回答
0

我创建了一个脚本,它只更改给定作者的行。每个作者都可以将其应用于代码库并保留代码作者身份。


import git
import black
from blib2to3.pgen2.tokenize import TokenError

new_lines = list()
author_email = "example@example.org"
filename = "setup.py"
for commit, lines in repo.blame('HEAD', filename):
    if author_email == commit.author.email:
        try:
            new_lines.append(
                black.format_str(
                    "\n".join(lines), 
                    mode=black.Mode()
                )
            )
        except:
            new_lines.extend(lines)
    else:
        new_lines.extend(lines)
open(filename, "w").writelines(new_lines)

该脚本只能更改一起对黑色有意义的代码行。如果作者只更改了多行语句中的一行,则不会更改它。所以在每个作者应用脚本之后,仍然需要将一些行改成黑色。但是,行数将比以前少得多。

更新可以在这里找到:https ://gist.github.com/JulianWgs/ba762ba729d8f17090cafd5230261ab2

于 2021-05-22T17:37:11.737 回答