Si vous pouvez l'exécuter:
git config --system receive.denyNonFastforwards true
sur le serveur, qui devrait prendre soin de réécrire l'histoire de cas d'être poussé vers ledit serveur.
Cependant, cela est pour toutes les pensions, pas pour certaine un fichier ou groupe de fichiers.
git config
:
receive.denyNonFastForwards
Si vous rebase s'engage à ce que vous avez déjà poussé et puis essayer de pousser de nouveau, ou essayer de le pousser à une validation à une branche distante qui ne contient pas de s'engager à ce que la distance direction générale des points à l', vous serez refusé. C'est généralement une bonne politique; mais dans le cas de cela, vous pouvez déterminer que vous savez ce que vous faites et peuvent forcer la mise à jour de la branche à distance avec un -f
drapeau de votre commande push.
L'autre façon dont vous pouvez le faire via le serveur-côté recevoir les crochets, j'aborderai dans un peu. Cette approche vous permet de faire des choses plus complexes comme nier non-rapide-vers l'avant pour un certain sous-ensemble d'utilisateurs.
Comme ebneter (qui sait l'importance d'une politique cohérente de référentiel -- voir la réponse au sujet de SVN à Git migrations) commentaires:
Vous pouvez aussi ajouter receive.denyDeletes true
parce que sinon, quelqu'un peut il suffit de supprimer la branche, puis pousser leurs réécrit l'un en tant que nouvelle branche, effectivement réécriture de l'histoire.
git config
:
L'une des solutions de contournement pour le denyNonFastForwards politique est pour l'utilisateur de supprimer la branche, puis remettez-la en place avec la nouvelle référence. Dans les plus récentes versions de Git (à partir de la version 1.6.1), vous pouvez configurer receive.denyDeletes
true:
$ git config --system receive.denyDeletes true
Ce nie direction de la balise et la suppression de plus de pousser à travers le conseil d'administration - aucun utilisateur ne peut le faire. Pour supprimer les branches distantes, vous devez supprimer les ref des fichiers à partir du serveur manuellement. Il y a aussi plus intéressant de façons de le faire sur une base par utilisateur via les Acl, que vous découvrirez à la fin de ce chapitre.