114

(簡単にするために) Git リポジトリにmasterブランチと aがあります。devブランチが常に機能していることを確認したいmasterので、すべての作業はdevブランチで行う必要があります。

ただし、マージで変更をマージすると、ブランチ--no-ffにとどまり、ブランチで作業を続ける傾向がありますmaster(ブランチをチェックアウトするのを忘れるためdev)。

masterコミットや早送りマージはできず--no-ff、別のブランチからのマージのみを行うというルールをブランチに設定できますか?

これは、プライベートにホストされたリポジトリで機能する必要があります (つまり、GitHub や Bitbucket ではありません)。

4

3 に答える 3

196

はい、可能です。master ブランチへのコミットを拒否する pre-commit フックを作成する必要があります。マージコマンドを呼び出すときに、Git は pre-commit フックを呼び出さないため、このフックは通常のコミットのみを拒否します。

  1. リポジトリに移動します。

  2. 次の内容のファイル.git/hooks/pre-commit を作成します。

    #!/bin/sh
    
    branch="$(git rev-parse --abbrev-ref HEAD)"
    
    if [ "$branch" = "master" ]; then
      echo "You can't commit directly to master branch"
      exit 1
    fi
    
  3. 実行可能にします ( Windows では必要ありません):

    chmod +x .git/hooks/pre-commit
    

早送りマージを無効にするには、次のオプションを.git/configファイルに追加する必要もあります。

[branch "master"]
    mergeoptions = --no-ff

リモートのマスター ブランチも保護する場合は、次の回答を確認してください: Git でマスター ブランチへのアクセスを制限する方法

于 2016-11-07T12:40:35.450 に答える