我有这个bash脚本,我想复制一个分支,并使用该复制分支对远程仓库进行PR,然后删除该复制分支:
gPullRequest () {
branch=$(git rev-parse --abbrev-ref HEAD)
if [ $# -eq 0 ]
then
git checkout -b development-$branch
elif [ $# -eq 1 ]
then
git checkout -b release-$branch
fi
gp
prBranch=$(git rev-parse --abbrev-ref HEAD)
if [ $# -eq 0 ]
then
hub pull-request -h org:$prBranch -b org:development
elif [ $# -eq 1 ]
then
hub pull-request -h org:$prBranch -b org:$1
fi
git checkout $branch
git branch -D $prBranch
}
问题在于,到时间branch
的变量prBranch
被重新评估为git checkout $branch
所指向的内容
branch
此代码运行时,gp () {
branch=$(git rev-parse --abbrev-ref HEAD)
git push origin $branch
}
变量是新的分支名称,而不是代码第一行中的第一个值。
关于如何保留branch的值以便以后执行bash脚本的任何想法?
编辑
15c77f1f6031 Exited (0) 11 seconds ago
340b71ec10c2 Exited (0) 22 seconds ago
7484ada905f6 Exited (0) 33 seconds ago
0aa691d2d3d9 Exited (0) 44 seconds ago
此错误以前没有出现在原始提示中,但这是导致该错误的原因。
答案 0 :(得分:1)
这肯定意味着您的bp
函数开始如下:
bp() {
branch=$1
othervar=$(whatever)
# ...do stuff here...
}
您不能安全地这样做,因为-与Java语言一样-变量默认在bash中是全局的。因此,在调用的函数内设置branch
也会更改父项中的值。
始终声明您的本地人,就像这样:
bp() {
local branch othervar
branch=$1
othervar=$(whatever)
# ...do stuff here...
}
(为什么要用两行分开,而不是local branch=$1
?因为当您想移至local foo=$(bar)
时,local
命令会吃掉{{1}的退出状态},使其以后无法确定其成功或失败;保持将局部声明保留在单独一行的习惯可以避免此问题。