0

我有这个 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变量是新的分支名称,而不是第一行代码中的第一个值。

关于如何保留分支的值以供以后执行 bash 脚本的任何想法?

编辑

gp () {
  branch=$(git rev-parse --abbrev-ref HEAD)
  git push origin $branch
}

这以前在原始提示中不存在,但这是该错误的原因。

4

1 回答 1

1

这肯定意味着您的bp功能开始于:

bp() {
  branch=$1
  othervar=$(whatever)
  # ...do stuff here...
}

你不能安全地做到这一点,因为——就像 Javascript——变量在 bash 中默认是全局的。因此,branch在您调用的函数内进行设置也会更改父级中的值。

总是声明你的本地人,像这样:

bp() {
  local branch othervar
  branch=$1
  othervar=$(whatever)
  # ...do stuff here...
}

(为什么要分开两行,而不是local branch=$1?因为当您想继续前进时local foo=$(bar),该local命令会吃掉 的退出状态bar,使得以后无法确定其成功或失败;保持将本地声明保留在单独行的习惯可以避免问题)。

于 2018-08-16T21:52:15.663 回答