0

我知道这听起来很糟糕,但这是我的用例。

我们有一个庞大的代码库,总是带有一些愚蠢的合并冲突,比如额外的逗号或新格式。

我们想引入一个自动代码格式化程序,以使整个项目之间保持一致,并让它为整个项目运行一次,然后在每次推送之前自动运行。

问题来了。如果可能的话,我们希望避免丢失有关谁在上一次提交中更改了什么的信息,因为这个大的“格式提交”只会包含空格、换行符,可能还有几个逗号。这可能吗?

4

1 回答 1

1

当你提交时,你可以指定你想要的任何作者(甚至是提交者,尽管我认为这并不重要)——这就是为什么这些值不能用于任何类型的敏感审计(这就是为什么 GPG 签名是一件事)。我会谈谈如何做,但我会解释为什么它可能是错误的解决方案。

声明作者是谁……这很容易。 git commit有一个--author选择。(见https://git-scm.com/docs/git-commit。)

git commit --author 'Bob <bob@company.com>'

因此,您可以编写一个脚本来从先前的提交中获取该信息(参见https://git-scm.com/docs/git-show获取它的一种方法)。

但就像我说的,这可能是错误的解决方案。想想你当初为什么要这么做...

从评论来看,您似乎担心git blame输出。

一般来说,为什么将责备命名为“在格式提交之前提交的最后一个人”比命名“运行格式化的 id”更准确?假设您有来自 Alice、Bob 和 Charlie 的提交,然后是格式提交。

A -- B -- C -- F

现在也许 Alice 变了file-a.txt,Bob 也变了file-b.txt,但即使 Charlie 只碰过,如果需要对这些文件中的任何一行进行file-c.txt重新格式化,该行似乎是由 Charlie 创作的。为了我的钱,这比让服务帐户运行格式并仅仅指责“不知道更好”更糟糕。

您可以通过在每次“真实”提交之后放置格式提交来改进这一点......但是一旦你这样做......

由于您只影响立即之前的提交,因此您可以commit --amend在提交格式化提交时使用;默认情况下,这不会更改原始提交的作者

但这是一个(小)历史重写,所以你真的想在受影响的提交被推送之前在本地进行。一旦你走了那么远......

如果提交格式不正确,为什么不设置不接受提交的钩子呢?您的服务器可以设置一个接收后挂钩来检查这一点,并且您的用户很可能会选择添加提交挂钩,以便立即消除问题,他们不必稍后返回并修复它。

于 2019-08-22T13:26:01.180 回答