如何阻止自己在git中使用master分支?

时间:2011-10-09 12:00:59

标签: git version-control ubuntu-11.04

我理想的工作流程是将更改提交到dev,并且仅通过git merge --no-ff dev将更改合并到master,但偶尔会发生以下情况:

开发

dev: git add .
dev: git commit -m "Cured cancer."
dev: git checkout master
master: git merge --no-ff dev

写一些代码

master: git commit -a -m "Did something amazing"

Whops,只是致力于掌握。如果我很幸运,我马上意识到这一点,但如果我不这样做,我可以将分支向上游推进另外10个更改。所以这最终会在远程:

Master   -------- Merge --- commit - commit --------------- Merge
Dev      \ Commit/                        \ commit - commit /

虽然看起来像这样:

Master   -------- Merge ------------- Merge --------------------- Merge
Dev      \ Commit/     \ commit commit /  \ commit - commit - commit /

如何消除人为因素(即我的愚蠢)并阻止自己投入到主分支?我在Ubuntu上。

3 个答案:

答案 0 :(得分:3)

这不是防弹解决方案,但您可以安装git-completion.bash并使用其PS1增强功能在命令提示符下显示当前分支(以及其他有用的东西)。有关说明,请参阅here

它不会阻止你承诺掌握,但它会让你很难忘记你所在的分支。

答案 1 :(得分:3)

您可以非常轻松地编写pre-commit hook来检查当前分支,并根据分支名称拒绝提交。

答案 2 :(得分:1)

我正在尝试设置类似的地方,只有hudson提交,因为它会合并你提交到master的远程分支,然后将它们推入我们的git Soooooo我们的主线主机只有GOOD代码,没有开发人员可以受到另一个破坏建设......哦,快乐的一天。

预接收脚本(服务器端 - 不要放在本地)....

#!/bin/sh
# <oldrev> <newrev> <refname>
# update a blame tree
while read oldrev newrev ref
do
    echo "STARTING [$oldrev $newrev $ref]"

if [ $ref == "refs/heads/master" ] && [ $USER != "hudson" ]
then
    echo "YOU CANNOT COMMIT STUFF TO MASTER BRANCH"
    echo "TO CORRECT THIS run"
    echo "git branch -c <branch name> then run"
    echo "git push <reponame> <branch name>"
    echo "and hudson will take and push to master IF it passes the tests"
    exit 1;
else
    echo "This is hudson, allowing commit to master"
fi

done

然后当然,我讨厌在接收后进行轮询我做这样的事情(请注意,哈德森用户无法运行curl命令,或者你最终无限循环,因为它不断推动它对主分支所做的更改) ...

接收后脚本(服务器端 - 不要放在本地)

echo "User=$USER"

if [ "hudson" != $USER ]
then
    echo "Notifying hudson to build NOW"
    curl http://10.222.0.168:8080/job/stserver1/build?delay=0sec
    echo "Done notifying"
else
    echo "This is hudson, not triggering build now"
fi

注意:我还没有找到开发人员将其提交恢复为master的方法,但是:(。仍在处理那个。