2009-06-06 13 views
0

J'utilise git pour mon flux de travail et j'ai un serveur de test distant. Quelle serait la meilleure façon de faire cela.Flux de travail Git avec un serveur de test

Actuellement, j'effectue mes modifications sur mon poste de travail et j'accepte les modifications, puis je les envoie au serveur. Mais cela conduirait rapidement à de nombreux petits commits. Je veux éviter de configurer le serveur de test sur mon poste de travail.

Et commas rebasing n'est pas correct parce que je pousse à un référentiel nu (qui a alors un crochet qui tire cela à un répertoire de travail qui est le serveur de test) qui est accessible par d'autres.

Merci

+1

Quel est le problème d'avoir beaucoup de petits commits? – hasen

+2

En outre, quel est le problème avec un serveur de test sur votre poste de travail? Je considérerais cela comme une exigence. –

+0

Je me demandais juste si ma méthode est standard. Mais si avoir un serveur de test sur mon poste de travail est l'approche recommandée, alors je vais essayer cela. – Chris

Répondre

2

Je pense que le vrai problème ici est que vous voulez "éviter de configurer le serveur de test sur [votre] poste de travail." Une philosophie clé en QAM est que chaque hôte peut ressembler autant que possible au système de production, de sorte que nous minimisons la quantité de travail à faire pour passer du développement au test à la production.

Le déploiement n'est pas un processus trivial, et plus vos développeurs seront confrontés à ce problème, plus il sera facile de mettre en œuvre l'application (et ses inévitables mises à jour).

Alors vous devriez vraiment penser, "dans quelle mesure puis-je répliquer l'environnement de production sur ma machine de développement?"

0

Pourquoi ne pouvez-vous faire de petits commits sur une branche de développement, puis écrasez-les en une seule commettras qui obtient fusionné sur la branche principale qui est poussé au serveur? J'utilise fréquemment des agences de développement privées.

1

Il n'y a rien de mal avec les petits commits. En fait, ils sont préférables car ils sont plus faciles à examiner qu'un gros patch blob. Ils montrent mieux votre processus de pensée et permettent au travail d'être examiné en petits morceaux. Et un critique peut toujours transformer beaucoup de petits commits en un grand, mais l'inverse ne peut pas être fait. Cela suppose que vos validations sont sous la forme de blocs logiques.

Mais puisque vous n'êtes pas tester jusqu'à ce que après vous pousser Je suppose que vos commits sont plus de la forme de « oups, je me suis cassé quelque chose commettre dernier ». Ceux-ci ne sont pas bons et empêcheront l'examen. Idéalement, ils devraient être --amend ed au commit précédent.

Code, validation, puis test empêche TDD. Ce que vous voulez faire est de commencer à partir d'un bon état connu, le code, exécuter les tests, voir un échec, puis savoir qu'il a été causé par quelque chose dans votre très petit et facile à déboguer diff. Cela signifie également que vous êtes en train de pousser des changements brisés dans le master, ce qui va vider tout le monde dans l'équipe.

Alors oui, vous avez besoin d'un environnement de test sur votre machine dev. Quelque chose qui fonctionne à la pression d'un bouton et se termine rapidement (nous parlons minutes, tops). Si la suite complète s'avère trop lente ou encombrante, vous pouvez exécuter une partie seulement de la suite, peut-être la partie que vous estimez la plus pertinente pour votre modification, puis laisser le serveur de test exécuter la suite complète après avoir appuyé sur. C'est un bon compromis entre l'efficacité du test et la rigueur.

Si, pour une raison ou une autre, vous ne pouvez pas faire fonctionner un environnement de test sur votre machine dev, vous pouvez travailler dans votre propre branche et pousser cela pour tester. Ensuite, si cela ne fonctionne pas, vous pouvez --amend votre solution. Une fois que vous avez terminé avec votre fonctionnalité, vous pouvez fusionner vos modifications en master.Cela à la fois élimine "Oups, je l'ai cassé" commet et vous empêche de briser le maître pour tout le monde tout en rendant encore petits, faciles à revoir commits. Ce que vous devriez utiliser votre serveur de test est d'exécuter les tests dans une simulation de production aussi proche que possible, les machines de développement sont souvent hétérogènes et en bonne santé, et d'automatiser les tests au cas où quelqu'un se désintègre.

0

J'ai une situation où je développe un outil pour manipuler des données sensibles. Cela signifie que mon environnement de développement n'a que des tests statiques et que je dois le déployer sur un serveur isolé qui n'a pas accès au Git de production standard. Ce que j'ai fini par faire, ce dont je ne suis pas entièrement satisfait, est de mettre en place une instance de test du script de traitement sur le serveur de production, et de le déployer fréquemment pendant le développement.

Auparavant, nous utilisions Subversion, et j'avais installé Darcs en plus de cela, ce qui fonctionnait bien. Editer, s'engager à Darcs, pousser à tester, faire mousser répéter, s'engager à SVN, pousser à la production. Git a tendance à se mélanger beaucoup plus que Darcs, mais je l'ai obtenu raisonnablement en observant que je peux avoir un dépôt Git en direct dans l'instance de test, et que je dois juste passer brièvement à un autre branche afin de pouvoir pousser.

#!/bin/sh 

set -e 

branch=${1-dev} 

# Temporarily switch to a different branch so that pushing is safe 
ssh server 'cd project && 
     { git branch -d trash 2>/dev/null || true 
      git checkout -b trash; }' 

git push server:project "$branch" 

# Switch to the newly pushed 
ssh server "cd project && git checkout $branch" 

Avec Darcs, j'ai pu apporter des modifications sur le serveur de test et les retirer, mais avec Git, il cherche à moi comme je devrai abstenir de le faire.