Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用git提交之前在另一个分支上自动创建分支_Git_Githooks - Fatal编程技术网

在使用git提交之前在另一个分支上自动创建分支

在使用git提交之前在另一个分支上自动创建分支,git,githooks,Git,Githooks,我有一个分支,比如说master。我没有masterpush限制。有没有办法让它说,如果在主机分支(或另一个分支)上意外执行了提交,则会自动创建一个新分支,并在其中进行提交 工作流示例: 克隆回购master分支 做了很多改变 git提交-am… 我想挂接到#3并创建一个新分支,如果此人正在master(或其他一些“标记的”分支)上提交 如果不可能,是否只在master上阻止提交?我可以通过创建预提交钩子来实现这一点: #!/bin/bash PROTECTEDBRANCH="master"

我有一个分支,比如说
master
。我没有
master
push限制。有没有办法让它说,如果在
主机
分支(或另一个分支)上意外执行了提交,则会自动创建一个新分支,并在其中进行提交

工作流示例:

  • 克隆回购
    master
    分支
  • 做了很多改变
  • git提交-am…
  • 我想挂接到#3并创建一个新分支,如果此人正在
    master
    (或其他一些“标记的”分支)上提交


    如果不可能,是否只在
    master
    上阻止提交?

    我可以通过创建
    预提交
    钩子来实现这一点:

    #!/bin/bash
    PROTECTEDBRANCH="master"
    
    CURRENTBRANCH=$(git rev-parse --abbrev-ref HEAD)
    
    if [ "$PROTECTEDBRANCH" == "$CURRENTBRANCH" ]; then
        RANDOMBRANCH=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)
    
        git checkout -b $RANDOMBRANCH
    fi
    

    我把它保存在
    .git/hooks/pre-commit
    ;它的工作原理与预期一样。

    在提交时自动切换分支可能会让人恼火和困惑,尤其是对于新用户。如果需要,请考虑设置远程,这样就可以阻止推送到<代码>主< /代码>分支。GitHub使用“受保护的分支”对此提供了一些支持。如果您是自托管,则提供细粒度的访问控制;正如你所看到的,它是有效的。我会发现Git为我创建一个随机的分支名称要比Git抱怨我自己没有创建一个重要的名称更令人讨厌。所以我宁愿设置一个预提交钩子来检查和打印投诉并退出非零。