doortts / blog

0 stars 0 forks source link

[뭘, 이런걸 다?] Git 프로젝트에서 두 커밋/브랜치/태그 사이에서 중요 파일들의 변경이 포함되었는지를 알려주는 쉘 스크립트 #213

Open doortts opened 8 years ago

doortts commented 8 years ago

@doortts (doortts) 님이 작성한 게시글입니다. ---

출처: https://github.com/doortts/check-important-files.git

가끔 여러명이 같이 작업하게되는 어떤 프로젝트에서는 특정 중요파일은 여러명이 작업하다보면 릴리즈하기 전에 특정 파일들의 변경이 포함되어있는지 확인해 볼 필요가 있는 경우가 있습니다.

그럴 때 사용할 수 있는 Unix 쉘 스크립트입니다.

1364178371219.png

Git 저장소내의 중요한 파일 보여주기

Git 저장소에서 중요한 파일이 두 커밋/브랜치/태그 사이에 존재하는지 알려주는 쉘 스크립트

#!/bin/bash
file=".reviewRequire"

# Check .reviewRequire exists
if [ ! -f $file ];
then
   echo "$file does not exist."
   exit 1
fi

# Check .reviewRequire items are exist between commits/branches/tags
tmpfile=$(mktemp)
while IFS= read -r line
do
    git diff --name-only $1 $2 | grep "$line" | tee "$tmpfile"
done <"$file"

# If it doesn't exist, then exit
if [ $? = 1 ]; then 
    exit 1
fi

# If exists, ask to show diff or not
echo "\nChanges detected! Show diff?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) while IFS= read -r line
              do
                git diff $1 $2 "$line"
              done <"$tmpfile";break;;
        No) break;;
    esac
done
rm "$tmpfile"

사용법

.reviewRequire 라는 파일에 체크해볼 파일들의 경로를 넣습니다.

.reviewRequire 예)

restart.sh
build.sbt
conf/
sh check.sh  a735115 3c501e6

sh check.sh  v1.1 v1.2-rc

만약 두 커밋사이에 중요 파일이 포함되어 있으면 포함된 파일 이름을 보여주고 diff를 보여줄 것인지 물어봅니다.

build.sbt
conf/application.conf.default
conf/messages
conf/messages.ko-KR

Changes detected! Show diff?
1) Yes
2) No
#?

--- attachments --- 1364178371219.png