OSXの端末でこれを実行すると、次のようなgitログ形式が提供されます。
* 58dbb08 Joe Blogs 5 weeks ago | [ABC-123] Commit message contents
* 5a9c5e1 Jane Doe 3 weeks ago | Commit Contents with XYZ-987 jira ticket number
* 6070ee0 Some Person 3 weeks ago | Commit which references [MNO-456, MNO-999]
OSXのCLI(git log、grep、sort、sedを使用)で次の形式でログを印刷するリストを作成したいと思います。
58dbb08 │ ABC-123
5a9c5e1 │ XYZ-987
6070ee0 │ MNO-456, MNO-999
──────────│──────────────────────
ꜛ sha │ ꜛ jira tickets
その目的は、QAがgitコミットで参照されているJiraチケットのリストを抽出し、リストを表示して関連するコミット/チケットを簡単に見つけることです。
sed
パターンを抽出して置き換えた後、一致するパターンのみを印刷する方法を理解した経験がほとんどなく、従うことは困難です。ドキュメントを読んだが、unix / regexへの露出がほとんどないことを考えると、いくつかの言語は慣れておらず、複数のパターンを抽出し、一致しない文字列を置き換える方法を解読することはできません。
私は現在何をしていますか?
git log --oneline 7.2.0..HEAD |
grep -iEo "([a-f0-9]{7})(.*[a-zA-Z0-9]{2,6}-[0-9]{1,4})+" |
sort -u |
sed -n "s/\([a-zA-Z0-9]\{2,7\}-[0-9]\{1,4\}\)/, \1 /pg"
これが私を作る。
58dbb08 Joe Blogs 5 weeks ago | [, ABC-123
5a9c5e1 Jane Doe 3 weeks ago | Commit Contents with , XYZ-987
6070ee0 Some Person 3 weeks ago | Commit which references [, MNO-456 , , MNO-999
近いけど不要なものを捨てることはできません。
答え1
だから私は私の小さな脳を押して罰して見つけました。醜い解決策。
私はこれが最善だとは思わないので、まだ助けと改善に感謝し、受け入れます!
git log 7.2.0..HEAD --oneline |
grep -iEo "([a-f0-9]{7})(.*[a-zA-Z0-9]{2,6}-[0-9]{1,4})+" |
sort -u |
sed -E $'s/([a-f0-9]{7}|[a-zA-Z0-9]{2,7}-[0-9]{1,4})/ \\\n\\1\\\n/g' |
grep -iEo "([a-f0-9]{7}|[a-zA-Z0-9]{2,6}-[0-9]{1,4})+" |
tr '\n' ' ' |
sed -E $'s/([a-f0-9]{7})/\\\n\\1 →/g' |
sed -E 's/([a-zA-Z0-9]{2,7}-[0-9]{1,4})/\1,/g' |
sed -E 's/(..)$//'
sed
このコマンドは insert some を使用して一致する式を複数行に分割し、必要な式に戻り\n
ますgrep
。最後に戻り、その文字をそれぞれおよび文字\n
に置き換えてから、最後の文字を切り取ります。→
,
,
私は最終的に:
58dbb08 → ABC-123
5a9c5e1 → XYZ-987
6070ee0 → MNO-456, MNO-999
私はこれが200コミットより小さいログサイズに対して非常に高速であることがわかりました。その目的は、リリースノートでいくつかの問題のリストを生成するのに役立ちますので、それ以上ではないはずです。しかし、スピード/品質の改善は好評です!