快捷合并分支并推送远端脚本
# 功能描述
工作中是多个项目组合开发,所以每次要进入到dev分支的项目路径不同
例如在开发项目路径下:
--future
----server(单独git项目 xxx分支)
----web(单独git项目 xxx分支)
1
2
3
2
3
用于合并到测试分支的项目路径:
--merge
----server(单独git项目 dev分支)
----web(单独git项目 dev分支)
1
2
3
2
3
每次在开发分支完成工作后,都要切换到dev分支,合并代码,推送远端。为了避免切分支时代码变动过大导致IDEA卡顿,所以单独有个文件夹下放dev分支代码。所以每次都是先在项目分支推送远端,然后切换到dev路径下合并代码,再推送远端。于是给这部分流程写到脚本中,在命令行一行搞定。
# 代码
#!/bin/bash
function gmerge {
local start_dir=$(pwd)
local path=${start_dir}
local folderName="${path##*/}"
local branch=$(git rev-parse --abbrev-ref HEAD)
local mergeFolder="../../merge/${folderName}"
echo "推送代码"
git push || { echo "推送代码失败"; cd "${start_dir}"; return 1; }
echo "当前路径:${path}"
echo "当前分支:${branch}"
echo "当前文件夹名:${folderName}"
echo "切换到目录 ${mergeFolder}"
cd "${mergeFolder}" || { echo "目录不存在: ${mergeFolder}"; cd "${start_dir}"; return 1; }
echo "拉取代码"
git pull || { echo "拉取代码失败"; cd "${start_dir}"; return 1; }
echo "合并分支 origin/${branch}"
if git merge "origin/${branch}"; then
echo "推送代码"
git push || { echo "推送代码失败"; git merge --abort; cd "${start_dir}"; return 1; }
else
echo "合并冲突,回滚合并"
git merge --abort
cd "${start_dir}"
return 1
fi
echo "回到目录 ${start_dir}"
cd "${start_dir}"
}
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
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
# 使用方法
使用控制台进入一个项目目录,执行 gmerge
即可。
# 总结
通过编写这个脚本,我学到了的 shell 知识:
folderName="${path##*/}"
获取路径最后一个文件夹名
${parameter##word}
是一种 Bash shell 中的参数替换语法,其中 ##
Bash shell 中的字符串操作符。
该操作符的作用是从变量 parameter
中删除最长的匹配 word
的子串,并返回剩余的字符串部分。其中,parameter
表示需要进行操作的变量,word
表示需要匹配的子串,##
表示从变量开头开始匹配并删除最长的匹配 word
的子串。
与之相对的${path%/}
,它的作用是从变量 path
的值中删除从末尾开始最短的匹配 /
的子串,并返回剩余的字符串部分。如果 path
的值以 /
结尾,则会删除这个 /
。
举个例子,假设 path=/home/user/project/src/index.js
,那么 ${path%/}
的结果是 /home/user/project/src
,即删除了结尾的 /
。
编辑 (opens new window)
上次更新: 2024/11/09, 09:01:06