git

[Git] Powershell 에서 한글 깨짐

Powershell 에서 git log 명령 실행시 한글로 작성된 커밋 메시지가 깨져 보이는 현상


commit bd269780b5c888b0ea86939f3dd08c12e68ef595
Author: coozplz <coozplz@gmail.com>
Date:   Mon Aug 22 19:44:26 2016 +0900

    ?뚯씠釉??뺣낫 異붽?

commit 23f13d59f8bc9f7e53fc91f322b8dfbbfddf0f95
Author: coozplz <coozplz@gmail.com>
Date:   Mon Aug 22 16:51:15 2016 +0900

    臾몄꽌 ?낅뜲?댄듃

위와 같은 문제 해결을 위해 git 명령 실행 결과를 디코딩과 인코딩 하는 작업을 하면서 확인 했었는데 보다 간단한 해결 방법을 찾았습니다.

1. Powershell 프로필 위치 확인

PS C:> $profile
C:\Users\coozplz\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
$profile 결과는 출력되는데 해당 위치에 파일이 없다면 위와 같은 경로에 파일을 생성해주세요.

2. $profile 값에 인코딩 변경 추가

# filename: Microsoft.PowerShellISE_profile.ps1

$env:LC_ALL='C.UTF-8'

3. Powershell 창에서 확인

commit bd269780b5c888b0ea86939f3dd08c12e68ef595
Author: coozplz <coozplz@gmail.com>
Date:   Mon Aug 22 19:44:26 2016 +0900

    테이블 정보 추가

commit 23f13d59f8bc9f7e53fc91f322b8dfbbfddf0f95
Author: coozplz <coozplz@gmail.com>
Date:   Mon Aug 22 16:51:15 2016 +0900

    문서 업데이트

정상적으로 표시되는 것을 확인할 수 있습니다.

기본
git

[Git] master 브랜치 커밋 막기

git-flow를 이용해서 회사 프로젝트를 진행하는데 git-flow에서는 master 브랜치에 대해 커밋을 허용하지 않는 형태로 진행이 됩니다. develop -> feature -> release -> master 브랜치로 머지(Merge)가 되는 형태입니다.

그렇기 때문에 커밋이 발생 했을 때 취소하는 것 보다 문제가 발생되기 전에 해결하는 것이 좋은 방법이라는 생각이기 때문에 git-hook을 이용하여 master 브랜치에서 커밋전에 현재 커밋이 발생되는 브랜치가 master라면 에러 메시지를 출력하고 커밋이 되지 않는 형태로 작성해 봤습니다.

아래 작성한 shell 스크립트에 실행권한을 주고 .git/hook/pre-commit 파일에 입력하면 master 브랜치에서 커밋이 되는 경우를 막게 됩니다.

#!/bin/bash
#
# FILE: .git/hook/pre-commit
#
# DESC: Stop accidental commits to master

BRANCH=`git rev-parse --abbrev-ref HEAD`

if [[ "$BRANCH" == "master" ]]; then
    echo -e "You are on \e[31m\e[1m[ $BRANCH ]\e[0m branch . You can not directly commit on \e[31m\e[1m[ $BRANCH ] \e[0mbranch"
    echo -e "Please checkout the other branch and commit"
    exit 1
fi


exit 0
기본
Tools

[Git] 문서파일 비교

git 레포지토리에는 MS-OFFICE 문서 파일이 포함되는 경우가 많이 있습니다.

만약 본인 또는 다른 사람이 문서 파일을 변경한 경우 문서의 어떤 부분이 변경 되었는지 확인 할 수 있다면 보다 효율적으로 업무를 볼 수 있습니다.

해당 내용은 Pro Git 이라는 책에도 어느정도 설명이 된 부분이지만 실제로 테스트를 해가며 적용한 내용을 공유하고자 합니다.

DOC[X] 비교

문서 파일을 비교하는 것은 pandocApache Tika 를 사용하는 방법이 있습니다. 물론 이외에 여러가지 방법이 있습니다.

 

pandoc 적용방법

1. Git Config 파일 수정

아래의 내용을 `.gitconfig` 파일에 추가합니다. `USER_HOME` 디렉토리는 `C:/Users/로그인계정` 입니다.

[USER_HOME/.gitconfig]

[diff "pandoc"]
textconv=pandoc --to=markdown
prompt = false

[alias]
wdiff = diff --word-diff=color --unified=1

2. Git Repository 디렉토리에 .gitattribute 파일 추가

Git 레포지토리로 이동하여 .gitattribute 파일을 생성한 후 아래의 내용을 넣습니다.

*.docx diff=pandoc

3. 문서 변경 부분 확인

저는 임의로 `test.docx` 라는 문서를 만들고 테스트를 했습니다.
`test.docx` 라는 파일에는 애국가가 적혀 있습니다.

[test.docx]

동해물과 백수산이 마르고 닳도록 하느님이 보우하사 우리나라만세.

이후 무궁화 삼천리 화려강산 대한 사람 대한으로 길이 보전하세 라는 후렴부를 추가했습니다.
비교된 결과를 확인해보겠습니다.

$ git diff
diff --git a/test.docx b/test.docx
index 44c02f2..27dc279 100644
--- a/test.docx
+++ b/test.docx
@@ -1 +1,3 @@
동해물과 백수산이 마르고 닳도록 하느님이 보우하사 우리나라만세.
+^M
+무궁화 삼천리 화려강산 대한 사람 대한으로 우리나라 만세.^M

불필요한 글자가 출력되기는 하지만 수정된 내용이 표시되었습니다.
무궁화 삼천리 화려강산 대한 사람 대한으로 길이 보전하세 소절에서 화려강산 이란 단어를 삭제하였습니다.

$ git diff
diff --git a/test.docx b/test.docx
index 27dc279..71bbf31 100644
--- a/test.docx
+++ b/test.docx
@@ -1,3 +1,3 @@
동해물과 백수산이 마르고 닳도록 하느님이 보우하사 우리나라만세.

-무궁화 삼천리 화려강산 대한 사람 대한으로 길이 보전하세.
+무궁화 삼천리 대한 사람 대한으로 길이 보전하세.^M

변경된 라인이 모두 출력됩니다.


Tika 적용방법

Apache Tika 의 경우 PPTX 포맷과 DOCX 포맷을 모두 지원한다는 장점이 있습니다.

1. Tika 다운로드

https://tika.apache.org/download.html 에서 tika-app 항목을 다운로드 합니다. 제가 테스트 하는 시점에서 tika 버전은 1.12 입니다.

2. 환경 변수 설정

다운로드한 tika-app-1.12.jar 파일을 환경 변수에 추가하거나 저장 위치를 확인합니다.

3. 배치 파일 생성

배치 파일은 .gitconfig 에서 호출하기 위함과 파라미터를 받기 위함입니다. tika 를 실행할 때 사용하는 옵션에는 여러종류가 있습니다. (링크참조)

[USER_HOME/tika.bat]

java -jar [TIKA 저장경로] -t --encoding=UTF-8 %1

4. `.gitconfig` 파일 수정

위에서 `pandoc` 적용 방법에서 수정한 `.gitconfig` 파일을 다시 수정합니다.
아래 부분에서 `openxml` 부분이 추가 되었습니다. `textconv` 속성에 위에서 작성한 `tika.bat` 파일의 경로를 지정합니다.

[USER_HOME/.gitconfig]

[diff "pandoc"]
textconv=pandoc --to=markdown
prompt = false
[alias]
wdiff = diff --word-diff=color --unified=1
[diff "openxml"]
textconv=C:/Users/coozplz/tika.bat

5. Git Repository 디렉토리에 .gitattribute 파일 수정

위에서 설정된 .gitattribute 파일을 아래와 같이 수정합니다.

*.docx diff=openxml
*.pptx diff=openxml

6. 문서 변경 부분 확인

위에서 수정한 내용을 커밋한 상태가 아니기 때문에 동일한 내용이 다시 출력됩니다.

$ git diff
diff --git a/.gitattributes b/.gitattributes
index 51cead2..ef6a520 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,2 @@
-*.docx diff=pandoc
+*.docx diff=openxml
*.pptx diff=openxml
warning: LF will be replaced by CRLF in .gitattributes.
The file will have its original line endings in your working directory.
diff --git a/test.docx b/test.docx
index 27dc279..71bbf31 100644
--- a/test.docx
+++ b/test.docx
@@ -1,4 +1,4 @@

-D:\temp>java -jar "C:\\Users\\coozplz\\tika.jar" -t --encoding=UTF-8 C:/Users/coozplz/AppData/Local/Temp/IjVuPa_test.docx
+D:\temp>java -jar "C:\\Users\\coozplz\\tika.jar" -t --encoding=UTF-8 test.docx ^M
동해물과 백수산이 마르고 닳도록 하느님이 보우하사 우리나라만세.
-무궁화 삼천리 화려강산 대한 사람 대한으로 길이보전하세.
+무궁화 삼천리 대한 사람 대한으로 길이보전하세

실행이 약간 느리기는 하나 문제없이 출력되는 것을 확인할 수 있습니다.

PPTX 변경 내용 확인

test.docx 문서와 마찬가지로 애국가 1절을 후렴부 없이 입력하고 커밋한 후 후렴부를 추가하였습니다.

$ git diff
diff --git a/test.pptx b/test.pptx
index 64fc17b..09ecd25 100644
--- a/test.pptx
+++ b/test.pptx
@@ -1,9 +1,10 @@

-D:\temp>java -jar "c:\\Users\\coozplz\\tika.jar" -t --encoding=UTF-8 C:/Users/coozplz/AppData/Local/Temp/F4N97a_test.pptx
+D:\temp>java -jar "c:\\Users\\coozplz\\tika.jar" -t --encoding=UTF-8 test.pptx ^M
애국가
1절
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세.
+무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세.

PPT문서를 텍스트 형태로 비교하는 내용을 확인 할 수 있습니다.

위에서 언급은 하지 않았지만 xlsx 문서 및 이미지 파일 비교도 가능합니다.

해당 내용은 나중에 올리도록 하겠습니다.

기본