1

意図:大量のレガシー コードがあるため、環境を徐々に改善するために、プル リクエストで追加または変更された行のみをリントしたいと考えています。

入力:ベース ブランチのmaster名前 ( )、PR ブランチの名前 (例honzajavorek/my-cool-feature)、機能ブランチの最後のコミットのハッシュ (例53253a3e8d9b1e3ed7d45b91e045c59d50aefdf0)。

出力:各ファイルの行番号が影響を受ける(追加または変更され、明らかに削除されていない)ため、リンター出力をフィルタリングしてそれらのみを含めることができました。

私は 1 つのライナーを探しているわけではありません。これを行うために短い bash/Python/node.js スクリプトを書いても問題ありませんが、合理的な複雑さ (数行) でのみです。


更新: Git diff with line numbers (Git log with line numbers) が見つかりました。簡単な作業ではないようです:(

4

2 に答える 2

1

必要なものを生成する bash の単純なコードを思いつくことができました。

ここでの素朴さは、これにはマスターと機能ブランチ間のクリーンな (線形) 履歴が必要であるという事実にありますが、これは常にそうであるとは限りません。実際、この例では master の代わりにこのブランチが迂回された後に master であった commit のハッシュを使用するか、これを行う前にブランチをリベースする必要があります。

また、機能ブランチがチェックアウトされたクリーンな作業ディレクトリでのみテストされました。

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

最初のループは、マスター ブランチと機能ブランチの間のすべてのコミットをウォークします。

2 番目のループは、フィーチャー ブランチ内の追跡されたすべてのファイルを調べます。

そして、3 番目 (最も内側) のループは、そのコンテキストで提供されたコミット ハッシュによって非難されるすべての行を見つけます。

最終的に、次の出力が得られるはずです。

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を試して、適切な diff 出力を取得する 1 つの方法を試してから、カスタム Git diff ドライバーのその部分を作成してください。すべての整理整頓は?

于 2016-09-06T12:11:41.017 に答える