2015-03-19 1 views
0

Existe-t-il un flux de travail git bien connu pour compiler l'état de code non validé actuel, de sorte que les modifications de code/données puissent continuer pendant la compilation asynchrone/déploiement/test?Préserver l'état Git Repo lors de la compilation

Cela ressemblerait (efficacement!) Au stockage puis au clonage de tous les états stockés de repos actuels à un endroit où les compilateurs s'exécutent réellement. Si la compilation ou le test échoue, vous devriez pouvoir passer de votre état d'édition actuel à l'état dans lequel un travail de construction a échoué.

Il peut y avoir plusieurs tâches asynchrones exécutées simultanément: (ex: release/debug).

+0

Donc vous parlez de quelque chose comme un FUSEd ~ commitfs ~ qui représente le système de fichiers tel qu'il apparaît dans un commit - donc vous pouvez 'git stash - [uka]' et monter ce commit quelque part? Une supposition éclairée indique qu'un clone --shared --single-branche serait très rapidement acceptable, peut-être que quelqu'un a construit un FS comme ça, n'a pas vérifié. – jthill

+0

Correct; sauf que ... le cycle de construction clone l'état actuel non-validé - c'est-à-dire dans les éditeurs. Le problème est que c'est actuellement une condition de concurrence pour continuer à éditer le code pendant que les cycles de construction/déploiement/test sont en cours. Si un cycle qui dure une demi-heure commence, vous devriez pouvoir passer au code d'édition et recevoir une notification quand un cycle se termine. Notez que cela signifie également que les fichiers de construction créés simultanément sont également un problème. – Rob

+1

Par conséquent, le clonage d'une mémoire. Si vous voulez un contenu identique, 'git stash -a; git clone -s --shared. ../build stash; git stash pop' est le plus facile à mettre en œuvre, vous pourriez obtenir de meilleures performances pour les mêmes résultats directement avec la plomberie. (dans le cas où ce n'est pas évident, c'est keyboard-to-editbox, mais je pense qu'il est substantiellement correct et utilisable) – jthill

Répondre

0

Un serveur d'intégration continue (tel que Jenkins, TeamCity ou Travis CI) effectuera toute la gestion et la comptabilité pour vous. Vous pouvez le configurer pour compiler chaque commit, ou chaque référentiel que vous chargez vers un référentiel Git central. Pas besoin de cacher compliqué et tel - ouvrez simplement une branche de fonctionnalité pour chaque chose non triviale que vous commencez, validez cette branche de fonctionnalité, et fusionnez quand tous les tests réussissent.

+0

Il s'agit de la condition de concurrence entre les éditeurs de code et les compilateurs et la suite de tests. Vous ne pouvez pas arrêter d'éditer le code juste parce qu'une longue compilation est en cours, et vous ne voulez pas de validation à chaque fois que vous tapez 'make'. Je viens de choisir rsyncing pour ça et ça marche bien: ie: si je change l'un des nombreux dépôts git sous src: rsync src turds && (cd turds && scons &). Le problème est que ces modifications ne doivent pas être validées car elles ne sont même pas encore connues. – Rob