-
Notifications
You must be signed in to change notification settings - Fork 0
/
git-deploy
executable file
·134 lines (107 loc) · 4.92 KB
/
git-deploy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
# Welcome screen
echo " ";
echo " (((((( (((((( ";
echo " ((( ( ((( ██╗███╗ ██╗███████╗██╗ ███████╗ █████╗ ██████╗ ███╗ ██╗";
echo " ((( ((, (( ((, ██║████╗ ██║██╔════╝██║ ██╔════╝██╔══██╗██╔══██╗████╗ ██║";
echo " (( ((( (( ██║██╔██╗ ██║█████╗ ██║ █████╗ ███████║██████╔╝██╔██╗ ██║";
echo " (( ((, (( ██║██║╚██╗██║██╔══╝ ██║ ██╔══╝ ██╔══██║██╔══██╗██║╚██╗██║";
echo " (( ((((((((( (( ██║██║ ╚████║██║ ███████╗███████╗██║ ██║██║ ██║██║ ╚████║";
echo " ((( ((( (( ╚═╝╚═╝ ╚═══╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝";
echo " ((((((((((((((((( ";
echo " ";
echo "Git deploy 자동화 스크립트";
echo ""
# Script to deploy to test branch
usage() {
err_msg "사용법: git-deploy [-h | --help] [-T | --include-test-branch]"
exit 1
}
exit_on_failed() {
echo "$@";
exit 1;
}
err_msg() { echo "$@" ;} >&2
# long 옵션 처리
A=""
is_override=0
local_deploy_branch="test"
remote_deploy_branch="origin/test"
working_branch=$(git branch --show-current)
while true; do
[ $# -eq 0 ] && break
case $1 in
--include-test-branch)
is_override=1
echo "현재 브랜치를 test 브랜치 위로 리베이스한 뒤 test 브랜치로 push 합니다."
shift; continue
;;
--help)
usage
shift; continue
;;
--*)
err_msg "알 수 없는 옵션: $1"
usage;
;;
esac
A=$A$([ -n "$A" ] && echo -e "\a")$1
shift
done
# $@' 값에 short 옵션만 남기기
IFS=$(echo -e "\a"); set -f; set -- $A; set +f; IFS=$(echo -e " \n\t")
# short 옵션 처리
while getopts "Th" opt; do
case $opt in
T)
is_override=1
usage
echo "현재 브랜치를 test 브랜치 위로 리베이스한 뒤 test 브랜치로 push 합니다."
;;
h)
usage
;;
*)
# err_msg "알 수 없는 옵션: -$OPTARG"
usage
;;
esac
done
shift $(( OPTIND - 1 ))
# Delete $local_deploy_branch with -f option
echo "🗑 로컬 $local_deploy_branch 브랜치를 삭제합니다."
echo "git branch -D $local_deploy_branch"
git branch -D $local_deploy_branch
echo ""
# Create new branch 'test' and checkout to this
echo "$working_branch 브랜치에서 🆕 $local_deploy_branch 브랜치를 체크아웃합니다."
echo "git checkout -b $local_deploy_branch"
git checkout -b $local_deploy_branch || exit_on_failed "오류가 발생했습니다. 문제를 해결하고 다시 시도하거나 수동으로 진행해주세요"
echo ""
# Rebase $local_deploy_branch onto $remote_deploy_branch branch when --include-test-branch option is specified
if [ $is_override -eq 1 ]
then
echo "현재 브랜치($local_deploy_branch)를 $remote_deploy_branch 브랜치 위로 리베이스합니다."
echo "git fetch"
git fetch
echo "git rebase $remote_deploy_branch"
git rebase $remote_deploy_branch || exit_on_failed "오류가 발생했습니다. 문제를 해결하고 다시 시도하거나 수동으로 진행해주세요"
echo ""
fi
# Push local branch onto the remote branch with -f option
echo "🆙 로컬 $local_deploy_branch 브랜치를 리모트로 강제 푸시합니다."
echo "git push -f origin $local_deploy_branch"
git push -f origin $local_deploy_branch || exit_on_failed "오류가 발생했습니다. 문제를 해결하고 다시 시도하거나 수동으로 진행해주세요"
echo ""
# Checkout back to initial branch
echo "🆗 시작 브랜치로 돌아옵니다."
echo "git checkout $working_branch"
git checkout "$working_branch" || exit_on_failed "오류가 발생했습니다. 문제를 해결하고 다시 시도하거나 수동으로 진행해주세요"
echo ""
# Delete 'test' branch
echo "🆓 $local_deploy_branch 브랜치를 삭제합니다."
echo "git branch -D $local_deploy_branch"
git branch -D "$local_deploy_branch"
echo ""
# Bye!
echo "👽 안녕!"