1

意图:由于有大量遗留代码,我只想对我的拉取请求中添加或更改的行进行 lint,以使环境逐渐变得更好。

输入:基本分支的名称(master),我的 PR 分支的名称(例如honzajavorek/my-cool-feature),功能分支中最后一次提交的哈希(例如53253a3e8d9b1e3ed7d45b91e045c59d50aefdf0)。

输出:每个文件的受影响(添加或更改,显然没有删除)行号,因此我可以过滤 linter 输出以仅包含那些。

我不是在寻找一个衬里,我可以编写一个简短的 bash/Python/node.js 脚本来执行此操作,但仅具有合理的复杂性(几行)。


更新:刚刚发现Git diff with line numbers (Git log with line numbers)。似乎真的不是一件容易的事:(

4

2 回答 2

1

我能够在 bash 中想出一个简单的代码,它会产生你想要的东西。

这里的幼稚在于这样一个事实,即这需要掌握一个特征分支之间的干净(线性)历史,但情况并非总是如此。事实上,在这个例子中,一旦这个分支被转移,你应该使用 master 的提交哈希而不是 master,或者在你尝试这样做之前重新设置分支。

此外,它仅使用干净的工作目录进行测试,功能分支已签出。

for COMMIT in $(git log --pretty=format:%h master...feature); do
  for FILE in $(git ls-tree -r feature --name-only); do
    for NUMBER in $(git blame --line-porcelain "$FILE" | egrep ^$COMMIT | cut -d' ' -f3); do
      echo "$FILE":$NUMBER
    done
  done
done

第一个循环遍历 master 和 feature 分支之间的所有提交。

第二个循环遍历功能分支中的所有跟踪文件。

第三个(最内部的)循环查找所有因该上下文中提供的提交哈希而受到指责的行。

最后,您应该得到以下输出:

points.yml:32
points.yml:33
points.yml:34
points.yml:37
site.py:12

格式一目了然。

于 2016-09-14T17:00:06.323 回答
0

尝试https://unix.stackexchange.com/questions/34874/diff-output-line-numbers以获得合适的差异输出的一种可能方式,然后将其作为自定义 Git 差异驱动程序的一部分,这样您就可以做到你所有的整理?

于 2016-09-06T12:11:41.017 回答