티스토리 뷰

발생일: 2014.02.14

키워드: git, githook, 깃훅, pre-commit

문제:
우리 프로젝트에서는 커밋 훅에서 npm 으로 패키지 관리를 하고 있고, shrinkwrap 으로 버전을 잠궈두고 있다.
누군가 package.json 파일을 변경한 후에 커밋하는 경우엔, 확인 메시지를 받아 shrinkwrap 을 업데이트하도록 가이드하려고 한다.

커밋 전(pre-commit 훅에서) 특정 파일이 변경된 것을 확인할 방법이 있을까?


해결책:

깃훅에서 아래와 같은 방법으로 처리했다.

<pre-commit>

# 커밋 대상 파일에 package.json이 포함되었는지 확인
PACKAGE_JSON_CHANGED=$(git diff --cached --name-only --diff-filter=ACM | grep package.json)

# shrinkwrap 실행을 위한 커맨드
COMMANDS=("npm prune" "npm shrinkwrap" "git add $PROJECT_DIR/npm-shrinkwrap.json")

# 파일이 변경되지 않았다면 종료
[[ -z $PACKAGE_JSON_CHANGED ]] && exit 0

# 변경된 경우엔 shrinkwrap 을 실행한다
for CMD in "${COMMANDS[@]}"; do
    $CMD

    if [[ $? -ne 0 ]]; then 
        echo "$CMD 에 실패했습니다. 확인 후 다시 시도해주세요."
        exit 1
    fi
done

exit 0



참고:




반응형
댓글
공지사항