Git分支和重定基址,我的脚本安全吗?

Git分支和重定基址,我的脚本安全吗?,git,bash,git-rebase,git-bash,Git,Bash,Git Rebase,Git Bash,我在一个团队中工作,我们在功能分支中进行所有开发,当功能完成后,我们将它们合并回我们的主分支(称为开发)。我们会定期对我们的软件进行正式的可用性测试或演示,因此我们会专门为这些测试创建分支,在这些测试中,我们会在合并到测试分支之前更改测试环境配置的某些部分 作为一个非常懒惰的人,我决定编写创建staging分支的过程的脚本,但是我对git还不够了解,我想确保我没有编写过一个函数,以后它会回来咬我。下面是我的函数(所有这些都在my.bashrc中): 以下是预期用途: newTest 1.3.7

我在一个团队中工作,我们在功能分支中进行所有开发,当功能完成后,我们将它们合并回我们的主分支(称为开发)。我们会定期对我们的软件进行正式的可用性测试或演示,因此我们会专门为这些测试创建分支,在这些测试中,我们会在合并到测试分支之前更改测试环境配置的某些部分

作为一个非常懒惰的人,我决定编写创建staging分支的过程的脚本,但是我对git还不够了解,我想确保我没有编写过一个函数,以后它会回来咬我。下面是我的函数(所有这些都在my.bashrc中):

以下是预期用途:

newTest 1.3.7
以下是我认为正在发生的事情:

  • 所有的变化都隐藏起来了
  • 分支“开发”已签出并 更新
  • 重新应用更改(注意:不直接进行开发 关于发展,所以永远不应该有变化)
  • 暂存分支是使用传入的版本号创建的,与开发分支的内容相匹配
  • 临时分支被推送到源上的新远程分支
这段代码中的任何内容是否会与我预期的工作方式不同,或者这段代码中的任何内容是否可以改进以更可靠地工作


谢谢你的帮助

嗯,这在很大程度上取决于你想变得多疑

您可以做的一件显而易见的事情是验证函数是否至少有一个参数,或者确切地说有一个参数,以便
$1
展开为:

case $# in
1) ;;
*) echo "usage: newTest <name>" 1>&2; return 1;;
esac
尽管您可能希望再次剥离参照/头/头:

ref=${ref#refs/heads/}
之后,您可以使用
$ref
避免重复
阶段测试-
部分

然后:如果分支名称已经存在怎么办?这是一个错误,还是应该更换?(例如,要使其成为错误,请检查git checkout-bfailure。)

然后:如果隐藏或重设基础失败怎么办?你说“永远不应该有变化”,但可能保存和应用隐藏的目的是有一些变化。我真的不清楚
updateDev
打算做什么。它不检查当前分支是什么,它只是使用
-X-theres
将当前分支(无论它是什么)重新定位到
开发上(这意味着保留所有内容的“我们”版本)

此外,假设对隐藏没有任何更改,但已经存在一个现有的隐藏。在这种情况下,
git stash
将在打印
无需保存的本地更改后成功退出。然后,
updateDev
脚本将运行rebase,并假设它成功,将弹出(应用并删除)最上面的现有存储。这几乎肯定不是一件好事


最后:如果
git checkout-b
和/或
git push
失败怎么办?(例如,由于磁盘空间不足或其他同样糟糕的事情,或者仅仅因为提供的名称已经存在。)

不要在脚本中使用别名。只需定义一个名为“代码> UpDeDeVe>代码”的函数,程序的一个基本规则是,不管你多么小心,以及你考虑和编码的多少个晦涩难懂的情况,总会有至少一个不应该发生的场景,并且事实上被证明是不可能的,但它还是会发生。@twalberg:“每个程序都至少有一个bug,至少有一行不必要的代码。因此,每个程序都可以简化为一行有bug的代码。:”[我在很多年前看到过这一点,但刚才在的一篇评论中又发现了,也没有署名,但可能是Alan Perlis引用的。]
local ref

ref=$(git check-ref-format --normalize "refs/heads/staging-test-$1") ||
    { echo "'staging-test-$1' is not a valid branch name" 1>&2; return 1; }
ref=${ref#refs/heads/}