8
votes

Comment puis-je empêcher la poussée GIT si des modifications locales sont détectées (y compris des fichiers non traqués)?

Parfois, quelqu'un de notre équipe fait un git poussant et enfreint la construction car sa construction locale fonctionne, mais il a oublié de commettre toutes ses modifications locales et ses fichiers non traqués à GIT avant qu'il ne pousse.

J'aimerais empêcher cela ... J'ai versé sur les docs pendant une heure environ aujourd'hui et je n'ai rien trouvé intégré.

Quelqu'un a-t-il des solutions?


0 commentaires

5 Réponses :


2
votes

Vous pouvez utiliser le Divers crochets (pré-recevoir, je crois) pour déterminer si la poussée enfreindra la construction et la rejetera. En plus de cela, vous devez dire à vos développeurs d'exécuter Statut GIT avant toute opération de validation ou de poussée, une règle incroyablement sensible à avoir en place et dissuaderait de tels problèmes.


0 commentaires

0
votes

Pour ajouter automatiquement des modifications, vous pouvez envisager d'utiliser le drapeau -A . De git-commit Page de l'homme :

Indiquez à la commande de Les fichiers de scène modifiés et supprimé, mais de nouveaux fichiers que vous avez non dit que Git ne sont pas affectés.

Il ne semble pas y avoir de drapeaux pour Git commettez qui ajoute des fichiers non traqués. Se souvenir de faire un git Ajouter. Avant que le commit est la meilleure solution que je puisse penser.


1 commentaires

Rappelez-vous que cela "ajout de git." ajoute uniquement des fichiers sous ou du même niveau que la commande est exécutée.



8
votes

Vous pouvez utiliser le Pré-Push Crochet (depuis Git 1.8.2).

Votre crochet pré-poussoir pourrait vérifier le code de sortie du statut GIT , retourner 0 (ok to appuyez sur) si Statut de git retourne non-zéro, sinon renvoyant 1 ( Ne pas autoriser la poussée).

La page man 'pour Statut de git dit:

S'il n'y a pas de chemin qui est différent entre le fichier d'index et le commit de la tête actuel (c'est-à-dire, il n'y a rien à commenter en exécutant GIT COMMIS), la commande sort avec statut non zéro.

Tout repo créé avec git 1.8.2 ou plus tard aura pré-appuyez sur dans le répertoire .git / hameçons , qui est un point de départ utile pour la mise en œuvre votre politique. Il existe plus de bons exemples d'utilisation du crochet ici: http://blog.ittybittyapps.com/blog/2013/09/03/git-pre-push/

Sachez que le crochet ne fonctionne pas sur le repo en amont. Chaque clone aurait besoin d'installer ce crochet pour appliquer votre politique. (Les crochets ne sont pas clonés dans le référentiel. Comme les crochets sont exécutés par GIT, cette conception empêche les crochets malveillants sur une machine de développeur. Le code malveillant devrait aller à la place dans un script Makefile ou Configurer, que les développeurs fonctionnent sans regarder.)


2 commentaires

N'est-ce pas le pré-appuyez sur crochet?


@Glyph - merci! Pré-Push a été ajouté dans GIT 1.8.2, alors ma réponse est obsolète. Pour toute personne intéressée, il y a quelques bonnes informations ici: blog. ittybittyapps.com/blog/2013/09/03/git-pre-push



0
votes

Peut-être mettre un alias, que ce soit dans votre shell ou votre configuration git, qui remplace la commande push par défaut avec un script personnalisé qui git l'état d'abord et vérifie "le répertoire de travail"? Je ne sais pas si la poussée d'écrasement est possible, ou si cela le ferait de le faire afin que vous ne puissiez pas appeler la pression réelle. Juste une idée du sommet de ma tête, alors je n'ai aucune idée si cela fonctionne vraiment.


1 commentaires

Vous ne pouvez pas utiliser un alias pour remplacer une commande intégrée. Un alias d'obus ne peut pas contenir d'espace, vous êtes donc à peu près pour écrire votre propre commande.



0
votes

J'ai fini par ajouter une cible de fourmi à notre construction locale avant de pousser à notre repo principal ... Voici la cible ... au cas où quelqu'un d'autre cherchait une étape dans la bonne direction.

Merci à tous ceux qui répondu. xxx


3 commentaires

Ma réponse a-t-elle aidé / répondre à votre question?


Vous devriez accepter la réponse de Matt ... Ce n'est pas particulièrement utile compte tenu de la question (provenait de Google et du commentaire de Matt était incroyablement utile)


J'ai fait ... il y a 6 ans