-
Notifications
You must be signed in to change notification settings - Fork 5
/
gitsync.sh
157 lines (133 loc) · 5.19 KB
/
gitsync.sh
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
### !/bin/bash
# @Description: git sync
# @Author: xiongxinwei [email protected]
# @LastEditTime: 2022-10-26 18:27:35
# @FilePath: \coded:\其他\测试文件夹\gitsync.sh
# Copyright (c) 2022 by xiongxinwei [email protected], All Rights Reserved. @blog: http://nsddd.top
# 1. git add .
# 2. git commit -m "update"
# 3. git push
# 4. git pull
# Linux下可以直接使用crontab -e命令来编辑定时任务,Windows下可以使用计划任务来实现定时任务的功能。
# crontab -e
# 0 0 * * * /bin/bash /home/xxx/gitsync.sh
# 不推荐使用pull,因为pull会把本地的修改覆盖掉,如果本地有修改,应该先commit,然后再pull
# windows下面没有bash,所以需要使用git-bash来执行脚本
# 脚本代码在线浏览
# http://xxw.nsddd.top/code?p=%2Fgitsync.sh&id=AN16H9
# Linux一键下载
# wget -c -d -O gitsync.sh http://sm.nsddd.top/uploads/2022/10/27/Y0iHb6ix_gitsync.sh?attname=gitsync.sh && echo "gitsync.sh" >> .gitignore && sh gitsync.sh && chmod 777 gitsync.sh \
###
is_change=$(git status -s) # 判断是否有文件改动
# 当前分支
branch=$(git symbolic-ref --short -q HEAD)
# remark
if [ -n "$1" ]; then
guser=$1
else
# git.user.name
guser="$(git config user.name) update"
fi
if [ 0 -lt ${#is_change} ]; then # 有文件改动
echo "监测到程序改动,程序将会自动帮您同步⚡ 请稍等...(The program will automatically help you synchronize ⚡ Please wait...)"
echo " "
echo "Myblog: http://nsddd.top"
echo
echo "脚本地址在线浏览🧷:http://sm.nsddd.top/uploads/2022/10/26/2iCzooCq_gitsync.sh"
is_change=$(git status -s) # 判断是否有文件改动
# 输出git信息
git status && git remote -v && git branch -a
echo "是否选择提交类型(默认选择yes)?(Y/N)"
# 输入
read -p "=> " choice
# 判断
if [ $choice == "n" ] || [ $choice == "N" ]; then
echo "您选择了不输入提交类型,这将会省略commit的<类型>参数"
else
echo "⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️"
echo "1: feat:新功能(feature)"
echo "2: fix:修补bug"
echo "3: docs:文档(documentation)"
echo "4: style: 格式(不影响代码运行的变动)"
echo "5: refactor:重构(即不是新增功能,也不是修改bug的代码变动)"
echo "6: test:增加测试"
echo "7: chore:构建过程或辅助工具的变动"
echo "8: revert:回滚"
echo "9: perf:性能优化"
echo "⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️"
feat="feat"
fix="fix"
docs="docs"
style="style"
refactor="refactor"
test="test"
chore="chore"
revert="revert"
perf="perf"
echo "请输入提交类型(前面的序号):"
read -p "=> " type
echo "请输入对应的说明"
read -p "=> " desc
if [ $type == "1" ]; then
type=feat
type2=$feat
elif [ $type == "2" ]; then
type=fix
type2=$fix
elif [ $type == "3" ]; then
type=docs
type2=$docs
elif [ $type == "4" ]; then
type=style
type2=$style
elif [ $type == "5" ]; then
type=refactor
type2=$refactor
elif [ $type == "6" ]; then
type=test
type2=$test
elif [ $type == "7" ]; then
type=chore
type2=$chore
elif [ $type == "8" ]; then
type=revert
type2=$revert
elif [ $type == "9" ]; then
type=perf
type2=$perf
else
echo "输入错误,将会使用默认提交类型"
type=feat
type=$feat
fi
echo "<$type>您输入的提交类型为 💡$type2 对应的说明为 💡$desc"
fi
git add .
git commit -s -m "$type($desc):$guser" # -s 用于签名, -m 用于备注
# pull
result=$(git pull origin $branch)
tmp=$(echo $result | grep "fix conflicts")
if [ "$tmp" != "" ]
then
echo "(ノ=Д=)ノ┻━┻ 合并冲突, 请手动解决后提交"
else
# 推送并且保证推送成功
git push origin $branch
fi
# 判断推动是否成功
if [ $? -eq 0 ]; then
echo "⚠️ 推送成功"
else
echo "⚠️ 推送失败"
fi
else # 没有文件改动
echo "本地没有改变, 正在从远程仓库同步代码. 请耐心等待➡️➡️➡️ ...";
result=$(git pull origin $branch)
tmp=$(echo $result | grep "fix conflicts")
if [[ "$tmp" != "" ]]
then
echo "(ノ=Д=)ノ┻━┻ 合并冲突, 请手动解决后提交"
fi
fi
# 打印一条log日志
git log -q -1 --use-mailmap --source --mailmap # -q 用于简化输出, -1 用于显示最近1条, --use-mailmap 用于显示作者名, --source 用于显示提交类型, --mailmap 用于显示作者邮箱