(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).
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.
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
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