git의 차이점 색상화

git의 차이점 색상화

설정

병합 전후의 diff를 표시하여 병합 커밋이 성공적으로 해결되었는지 확인하는 스크립트를 작성했습니다. 예를 들어, 내 기록이 다음과 같다면:

* 5c8cb0d2 merge result
|\
| * 3685c2ea branch2 commit b
| * 556dcd25 branch2 commit a
* | bb72182a branch1 commit
|/
* 45d827a3 common ancestor

45d827a3 common ancestor먼저 bb72182a branch1 commit(branch1에 원래 변경 사항 적용)과 비교한 다음 (branch2가 Branch1에 의해 어떻게 "강화"되는지 보여줌) 3685c2ea branch2 commit b과 비교합니다 .5c8cb0d2 merge result

이상적으로 두 diff는 동일해야 하지만 충돌이 있는 경우(예: 분기 2가 분기 1에서 사용되는 함수의 이름이 변경됨) 병합 커밋에서 이를 해결해야 합니다. 병합 커밋으로 이러한 문제가 올바르게 해결되고 실수로 문제가 발생하지 않는지 확인하려면 다음을 수행하세요.이 두 가지에 대해 비교를 해봤습니다.

질문

결과적인 차이의 색상은 그리 좋지 않습니다. 예를 들어, 분기 2에 추가된 줄을 실수로 삭제하면 원래 diff에는 이러한 줄이 포함되어 있지 않지만 새 diff에는 포함되어 있기 때문에 녹색으로 나타납니다. 즉, 행의 시작을 기준으로 다음 테이블을 적용해야 합니다.

  • ++= 녹색(새 diff에 의해 행이 추가되었지만 이전 diff에서는 변경되지 않았습니다)
  • +-= 빨간색(새 diff에서는 행이 제거되었지만 이전 diff에서는 변경되지 않았습니다)
  • -+= 빨간색(새 diff에서는 줄이 변경되지 않았지만 이전 diff에서는 추가됨)
  • --= 녹색(행은 새 diff에서는 변경되지 않았지만 이전 diff에서는 제거되었습니다)
  • += 흰색(새 컨텍스트 줄만 해당)
  • -= 흰색(이전 컨텍스트 줄만 해당)

부분적인 해결책

을 사용하여 하나의 규칙을 구현할 수 있지만 sed모든 규칙을 한 번에 적용하는 방법을 모르겠습니다. 예를 들어 규칙을 구현하면 다음과 같습니다 -+.

git diff ... | { esc=$(printf '\033'); sed -E "s/(^\-\+.*)/${esc}[0;31m\1${esc}[0m/"; }

관련 정보