web-dev-qa-db-fra.com

Git: Empêcher les commits dans la branche principale

(Pour plus de simplicité), j'ai une branche master et un dev dans mon repo Git. Je veux m'assurer que la branche master fonctionne toujours, donc tout le travail que je fais devrait être dans la branche dev.

Cependant, lorsque je fusionne mes modifications avec un --no-ff _ fusionne, j’ai tendance à rester dans la branche master et à continuer à y travailler (car j’ai oublié de commander ma branche dev).

Puis-je mettre en place une règle pour la branche master, dans laquelle il est indiqué que je ne peux pas effectuer de validations et effectuer des fusions en avance rapide, mais uniquement --no-ff fusionne depuis une autre branche?

Cela doit fonctionner pour les référentiels hébergés privés (ergo not GitHub et BitBucket).

45
Rasmus Bækgaard

Oui c'est possible. Vous devez créer un point d'ancrage de pré-validation qui rejette les commits dans la branche principale. Git n'appelle pas le hook pré-commit lorsque vous appelez la commande merge , ce hook rejettera donc uniquement les commits normaux.

  1. Allez dans votre référentiel.
  2. Créez un fichier . Git/hooks/pre-commit avec le contenu suivant:

    #!/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. Rendez-le exécutable (non requis sur Windows ):

    $ chmod +x .git/hooks/pre-commit
    

Pour désactiver la fusion rapide , vous devez également ajouter l'option suivante à votre . Git/config fichier:

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

Si vous souhaitez également protéger la branche principale de votre télécommande, cochez la réponse suivante: Comment restreindre l'accès à la branche principale sur git

99
qzb