-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpre-push
More file actions
executable file
·38 lines (26 loc) · 1019 Bytes
/
pre-push
File metadata and controls
executable file
·38 lines (26 loc) · 1019 Bytes
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
#!/bin/sh
# Branch names to protect
PROTECTED_BRANCHES=( protect-from-force-push-test master deployment/qa deployment/production deployment/demo )
CURRENT_BRANCH=$(git symbolic-ref --short HEAD)
PUSH_COMMAND=$(ps -ocommand= -p $PPID)
IS_DESTRUCTIVE='-f|--force|--delete'
for i in "${PROTECTED_BRANCHES[@]}"
do
PROTECTED_BRANCH=$i
WILL_REMOVE_PROTECTED_BRANCH=':'$PROTECTED_BRANCH
# エラーメッセージを定義
MESSAGE="You CAN NOT '$PUSH_COMMAND' to '$PROTECTED_BRANCH'. You should 'git fetch && git merge origin $PROTECTED_BRANCH' first, then 'git push' without force option again."
if [[ $PUSH_COMMAND =~ $IS_DESTRUCTIVE ]] && [ $CURRENT_BRANCH = $PROTECTED_BRANCH ]; then
echo >&2 $MESSAGE
exit 1
fi
if [[ $PUSH_COMMAND =~ $IS_DESTRUCTIVE ]] && [[ $PUSH_COMMAND =~ $PROTECTED_BRANCH ]]; then
echo >&2 $MESSAGE
exit 1
fi
if [[ $PUSH_COMMAND =~ $WILL_REMOVE_PROTECTED_BRANCH ]]; then
echo >&2 $MESSAGE
exit 1
fi
done
exit 0