web-dev-qa-db-fra.com

Poussez-vous chaque commit?

J'aimerais, si quelqu'un pouvait me donner plus de détails sur le travail avec git et les référentiels distants. Je n'ai pas encore travaillé avec des référentiels distants.

Dans le référentiel local, vous validez des modifications plus petites qui ne sont peut-être pas trop destructrices. Qu'est-ce qui est poussé vers le référentiel distant? Chaque engagement local? Ou le travail d'ensemble qui a été fait, qui est ensuite fusionné avec les travaux d'ensemble des autres? Je pense que le journal du référentiel distant doit être déroutant, si tout le monde pousse chaque commit.

42
rynd

Pousser et tirer du référentiel distant n'est pas aussi important que vos commits locaux. Il suffit généralement de pousser et de tirer plusieurs fois par jour. Comme l'a dit @earlonrails, des poussées plus fréquentes signifient moins de risques de changements conflictuels, mais ce n'est généralement pas si grave.

Pensez-y de cette façon, en vous engageant dans votre référentiel local, vous dites essentiellement "J'ai confiance en ce code. Il est complet. Il fonctionne. Je l'ai testé. Je suis prêt à être vu par d'autres personnes." Si vous voulez pousser vers le référentiel distant après chaque validation, c'est bien, mais tant que vous le faites régulièrement, cela n'a pas vraiment d'importance.

Les référentiels locaux visent à suivre vos modifications pour protéger le travail que vous faites. Les référentiels distants sont destinés à distribuer le travail à tous vos coéquipiers et à suivre les changements de chacun. Vos coéquipiers ont besoin d'accéder à votre code, mais généralement ce n'est pas urgent et pouvez attendre la fin de la journée ou chaque fois que vous avez envie de pousser.

42
acattle

Vous pouvez pousser à distance à votre convenance. Le seul problème lié à l'envoi simultané de plusieurs validations est que vous devrez peut-être fusionner davantage de conflits avec des fichiers plus affectés. Si vous êtes nouveau sur git, je recommande git ready .

Les télécommandes fonctionnent exactement comme le repo local, mais vous devez jouer à Nice avec les autres. Si d'autres personnes poussent vers la télécommande avant de pousser. Ensuite, vous devrez retirer leurs modifications avant de pouvoir pousser. Si vous touchez tous les deux le même fichier, puisque leur modification a été effectuée en premier, vous devrez fusionner les deux modifications ensemble.

17
earlonrails

J'essaie de pousser chaque commit local autant que possible (j'utilise Git). J'ai rarement 2 commits ou plus localement. Sinon, il y a un risque de conflit qui n'est pas si agréable à résoudre.

Je préfère utiliser le rebase plutôt que la fusion, pour garder l'histoire plus linéaire. Si j'ai 2 commits A et B (B est plus ancien) localement et que B entre en conflit avec les changements à venir, après avoir résolu les coflicts lors du rebasage, je dois vérifier B, vérifier la compilation, peut-être exécuter des tests, puis passer à A et pousser tout cela .

C'est pourquoi je préfère pousser tout ce que j'ai dès que possible.

8
Dmitry Pavlenko

Je suis généralement en désaccord avec la meilleure réponse et certains commentaires. Ni commits ni Push ne doivent être responsables de la qualité du code.

À l'ère svn, tout le monde travaille dans la même branche. L'échec de votre code se propage rapidement aux autres. Dans ce cas, vous devez absolument garantir la qualité de votre code, et c'est la raison pour laquelle svn est remplacé par git dans de nombreuses entreprises et organisations.

Nous devons clarifier ce qu'est un workflow Git typique. Supposons que votre branche principale possède une version du logiciel en quelque sorte réalisable. Certaines personnes préfèrent utiliser la branche principale comme branche de publication, tandis que d'autres l'utilisent comme branche de développement. Ce n'est pas important. Chaque fois que vous devez ajouter une fonctionnalité ou corriger un bogue, vous créez une branche à partir de la branche principale (ou d'une autre). La fonctionnalité doit être suffisamment petite pour être gérée sans entraîner de modifications importantes de la base de code. En cas de modification importante, des couches de branches doivent être créées afin que la dernière couche de la branche soit suffisamment petite.

Si chaque branche doit ajouter une petite fonctionnalité, il est peu probable que de nombreuses personnes travaillent dans la même branche. Si plusieurs personnes travaillent sur une fonction, ce groupe doit être très petit et communiquer très souvent et, par conséquent, les conflits doivent être facilement résolus. Si un commit ou un Push a un problème, seuls vous ou votre petite équipe aurez un problème.

Ensuite, où nous devons garantir la qualité du code. Ma réponse est les demandes de tirage. Dans Github, vous modifiez le code et soumettez une demande d'extraction. Au moment où vous soumettez la demande d'extraction, vous devez garantir que votre code peut compiler et passer les tests. Dans Gitlab, vous créez une demande de fusion avant de modifier le code, mais marquez avec WIP (travail en cours). Ensuite, vous modifiez le code. Avant de supprimer la marque WIP, vous devez vous assurer que votre code est de bonne qualité. De plus, le réviseur de code sera une autre couche de protection.

Les conflits devraient rarement se produire dans votre branche, mais cela peut se produire lorsque vous fusionnez votre branche avec la branche de base. Vous devez le corriger juste avant cette fusion.

La seule chose est liée au rebase. De nombreux développeurs aiment rebaser leur branche avant de soumettre un conflit de fusion pour améliorer l'historique de la validation de git. Si vous avez poussé vers la télécommande et que d'autres personnes ont utilisé votre code, le rebase provoque des problèmes désagréables à résoudre. Cependant, si vous travaillez toujours sur une branche qui ne corrige qu'une petite fonctionnalité, personne ne devrait de toute façon utiliser votre branche. De plus, personnellement, je n'aime pas vraiment le rebasage car il modifie l'histoire.

Donc ma conclusion est similaire aux autres, engagez-vous souvent et poussez souvent, mais pour une raison différente.

1
Yifan Sun