Git 단어 단위 diff
dev | 2013-09-02
코드를 DVCS로 관리하는 것처럼 텍스트의 변경내역도 DVCS를 사용해 봤는데 썩 마음에 들지는 않았다. 문서는 한줄이 길어질 수가 있는데 단어 하나 바뀌는 정도의 변경이 있어도 전체 줄이 변경되었다고 표시가 되어서 변경 내역을 확인하기가 쉽지 않았기 때문이다. 통상 줄단위로 코드의 변경을 관리하는 방식만 써봐서 그동안 위키나 깃헙에서 변경된 줄 안에 변경된 단어도 같이 표시해주는 것을 보고 궁금해 했었는데 한번 찾아봤다. 우선은 GNU 프로젝트로 wdiff라는 것을 발견했지만 이미 Git 안에 단어별로 diff를 확인하는 기능이 들어 있었다.
단어별로 변경내역을 확인하려면 --color-words
옵션을 사용하면 된다.
git diff --color-words
그러면 삭제된 내용은 빨간색으로 나오고 추가된 내용은 초록색으로 나오게 된다.
이 결과물을 다른 사람도 읽기 쉽도록 포맷팅하는 문제가 있었는데 찾아보니 ANSI를 HTML로 바꾸는 방법도 있고 관련된 프로젝트도 많이 있었다. 하지만 내가 하고 싶은 것은 단순히 추가, 삭제된 부분을 ins, del 요소로 싸주고 색을 넣은 후에 Pages에서 약간의 편집을 해서 전달하는 것이었기 때문에 이 기능을 안쓰고 간단히 만들었다. 이렇게 하려면 변경내역을 색상으로 구분해서는 안되고 문자가 들어가야 하는데 --word-diff
옵션을 사용하면 삭제된 부분은 [-텍스트-]
, 추가된 부분은 {+텍스트+}
와 같이 나오게 된다. 단, 원본에 있는 [-, -], {+, +} 기호를 이스케이프 시켜주지는 않기 때문에 주의해야 한다. 그리고 diff 기본 설정으로는 앞뒤 문맥을 3줄씩 보여주는데 이러면 내용이 너무 길어져서 문맥을 조절하는 -U
옵션도 추가했다.
git diff -U1 --word-diff > ../diff.txt
이렇게 텍스트 파일을 떨군 다음에 str_replace
로 원하는 HTML을 만들었다. 글자색을 헤드에서 선언을 하니 Pages로 복사해 넣을 때 글자색이 안따라와서 ins, del 요소에 일일이 선언해 줬다.
물론 원본 파일을 Git으로 관리해버리면 이렇게 할 필요가 없겠지만 일단 원본 파일이 MS Word로 되어있고 Git을 모든 사람이 다 쓰는것도 아니고 실제 문서를 에디팅할 사람도 따로 있는 것 같아서 번거로운 과정을 거칠 수 밖에 없었다. 코드 뿐만 아니라 문서작업도 버전관리를 통해서 하고 최종 결과물만 퍼블리시하는 방식으로 하면 협업도 쉽고 참 좋은 세상이 올텐데 말이다.
Comments
--color-diff 라는 옵션은 없다고 나오네요. 혹시 --word-diff 오타 아닌가 싶네요.
--color-words 네요. 알려주셔서 감사합니다.
덕분에 diff 보는게 편해졌네요 :)