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개 커밋보다 작은 로그 크기에 대해 매우 빠르다는 것을 알았습니다. 그 목적은 릴리스 노트에서 일부 문제 목록을 생성하는 데 도움을 주는 것이므로 그 이상은 아니어야 합니다. 그러나 속도/품질 개선은 호평을 받았습니다!