web-dev-qa-db-ja.com

Git:masterブランチでのコミットを防ぐ

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

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

masterブランチにルールを設定できます。このルールでは、コミットと早送りマージはできませんが、別のブランチからのマージは--no-ffのみです。

これは、プライベートホストリポジトリ(GitHubおよびBitBucketではなくエルゴ)で動作する必要があります。

45

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

  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
    

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

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

リモートのmasterブランチも保護したい場合は、この答えを確認してください: gitのmasterブランチへのアクセスを制限する方法

99
qzb