avant git commit crochet pour assurer HEAD est à jour de prise en pension de maître

StackOverflow https://stackoverflow.com/questions/3994252

  •  10-10-2019
  •  | 
  •  

Question

Je déplace mon équipe sur un vieux dépôt CVS à l'aide git. J'espérais ajouter un crochet avant de s'assurer engager au préalable Commit est fait localement (et poussé) chaque personne a une mise à jour repo.

Par exemple, dans tout le monde CVS ferait un « cvs up » avant de faire des changements, puis engager. Je veux le forcer pour que les gens ne peuvent pas valider les modifications à moins qu'ils ne l'ont fait une première git pull origin master (nous n'utiliserons branches supplémentaires)

Y at-il un moyen facile de le faire? hourras pour toute aide:)

Était-ce utile?

La solution

Vérifier et voir si les SHAs de git ls-remote origin HEAD (pointe à distance) et git rev-parse HEAD (pointe locale) sont égaux?

Notez que, ce faisant, vous jeter LOT de la flexibilité de Git - pensez que ce soit vraiment ce que vous voulez faire. Une partie de la force de git pull est que même si vous avez commettez des choses qui ont divergé de la copie maître, lorsque vous tirez du maître copier vos modifications peuvent être fusionnées en (et dans la plupart des cas, le processus est entièrement automatique).

Si votre objectif est d'avoir un linéaire de commettre l'histoire (qui a ses propres compromis), je vous suggère de jeter un oeil à la commande rebase au lieu de forcer vos développeurs à ne jamais commettre derrière l'origine / maître.

Modifier

En fait, si vous faites juste git pull (au lieu de rebasage), vous ne serez pas en mesure de comparer les têtes, parce que tirer le ferait commits de fusion. , Vous auriez besoin au lieu de comparer git ls-remote origin HEAD à git merge-base origin/HEAD HEAD.

D'autres commentaires

  • Pourquoi utilisez-vous Git, mais pas en utilisant des branches supplémentaires à tous? C'est un peu comme acheter une voiture, mais jamais en utilisant le moteur (et au lieu simplement pousser partout). Les branches sont pas cher dans Git, rapide à mettre en place, et presque sans effort de fusion. Vous vous faites un mauvais service si vous ne faites pas usage.

  • Pourquoi vous souciez-vous tous d'être mis à jour avant de modifier? Ce n'est pas CVS, la résolution des conflits est pas terrible - Git auto-détermination 95% des conflits pour vous, sans que vous ayez à faire une chose, donc si vous git pull avant ou après avoir effectué vos modifications ne compte pas vraiment - vous juste besoin de tirer avant de pousser et vous serez très bien.

  • En relation avec le point précédent: non depuis pousse rapide à terme sont rejetées par défaut, vous ne avez pas vraiment besoin d'un crochet. Il suffit de dire à vos développeurs « si votre pression est rejeté comme étant non-avance rapide, faites un git pull, essayez de pousser à nouveau » et tout fonctionne.

Autres conseils

Cela détruit la nature 'distribuée' de git. Il fait un peu tous les commettras mondiale. Les cvs « commit » est analogue à la git « push » qui est ce qui communique avec l'extrémité distante.

Si vous voulez vraiment profiter du modèle distribué, vous devez encourager et faire de votre équipe à comprendre le point de commits locaux plutôt que de faire le système a frappé le repo central sur tous les commits (qui est sciée centralisée).

Si vous suivez la branche à distance:

git fetch
git log HEAD..origin
# or:
git diff ...origin

Comme d'autres réponses fait allusion, forçant ce genre de contrôle n'est pas toujours une bonne solution pour any repo à distance, mais il peut être intéressant d'avertissement.

Ne pas oublier que git push sera par défaut rejeté si ce n'est pas un changement de fastforward .
Ainsi, le git pull sera le moyen d'éviter ce message de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top