2010-06-14 9 views
7

Je développe dans un langage de script propriétaire avec un code très repris dans lequel la plupart des configurations sont contenues dans le code lui-même.Fusion manuelle sur GIT

Le problème évident serait les différences dans le code lui-même entre les environnements de test et de production et c'est exactement ce que j'essaie de gérer avec GIT. Comme mon test env est assez volatil, j'ai pensé que je pourrais créer une branche dans GIT pendant que des changements sont faits (et garder le code avec des configurations de test) et après que le code ait été accepté, je fusionnerais en production. Eh bien, quand je demande à git de fusionner mes branches, cela fait du bon travail avec le code .. mais les configs sont migrées aussi bien que je dois ouvrir fichier par fichier, en le changeant à ce qu'il était .

Y at-il de toute façon que je puisse désactiver la fusion automatique de GIT et menace tout comme les conflits de code à fusionner manuellement avec WinMerge ou quelque chose plus tard? Le code est court, vraiment. Et puisque je vais devoir l'éditer quand même pour appliquer les configurations ...

ps .: attention, je ne vous demande pas comment configurer WinMerge sur git. J'ai ces outils qui fonctionnent. Ma question est de savoir comment effectuer des fusions manuelles entre branches.

merci!

f.

Répondre

5

désactiver la fusion automatique

Cela pourrait être obtenir en écrivant un petit pilote de fusion, situé dans a .gitattributes file.
Une politique comme unset pourrait être ce que vous cherchez.

Unset 

Prenez la version de la branche actuelle comme résultat de la fusion provisoire, et déclarer que la fusion a des conflits. Ceci est approprié pour les fichiers binaires qui n'ont pas de sémantique de fusion bien définie.

Mais un autre pilote gitattribute intéressant serait un clean filer:

http://git-scm.com/figures/18333fig0703-tn.png

Ce serait exécuter automatiquement un script « propre » de votre choix juste avant de commettre le contenu « nettoyé » à la mise en pension.
Un tel script 'clean' pourrait vous aider à automatiser les modifications que vous devez apporter à votre code pour conserver ou modifier les valeurs de configuration intégrées.

+0

Hm .. c'est assez intéressant , mais je ne suis pas si familier avec les pilotes GIT. J'ai ajouté à mon '.gitconfig' ce qui suit: ' [Merge "manuel"] \t name = fusion manuelle \t driver = Unset' puis ajouté à la .gitattribute: '* fusion = manuel ' (ramassé ceux-ci de' git help merge') n'a pas fonctionné cependant. pourriez-vous être plus précis avec le pilote git? merci! f. – filippo

+0

@flpgdt: ce serait un pilote de fusion personnalisé (défini dans le fichier .gitconfig en effet). Je faisais juste référence à l'attribut merge (voir http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html). Un simple: 'echo * .xxx merge = unset> dirWithConfgFiles \ .gitattributes' devrait suffire (avec 'xxx' étant l'extension pour les fichiers de code incluant les valeurs de configuration) – VonC

+0

hey mate. Cela n'a pas fonctionné réellement. J'avais mes .gitattributes (essayé les deux, dans mon dossier racine et dans mon dossier contenant les fichiers exacts) comme '* .xml merge = Unset'. Je vais continuer à essayer, mais merci quand même. Je jetais aussi un coup d'oeil dans la façon de créer le pilote propre, et bien que je pense que j'ai réussi à le créer, je ne sais pas comment dire à GIT de l'utiliser :( merci! f: – filippo

2

Vous dites que "la plupart des configurations sont contenues dans le code lui-même" mais nous espérons que toute la configuration est isolée dans les fichiers spécifiques à la configuration. Si tel est le cas, vous pouvez conserver les cas de test et de libération du code de configuration dans la même branche. Vous pouvez ensuite utiliser un commutateur de ligne de commande pour utiliser la configuration de test au lieu de la configuration normale. Si votre programme peut lire une sélection de configuration à partir de la ligne de commande (ou de la variable d'environnement, de la clé de registre, du fichier texte ou autre), vous n'aurez pas à fusionner du tout. Le programme peut ignorer les fichiers de configuration de test lorsque le commutateur de ligne de commande n'est pas présent et ignorer la configuration de version lorsque le commutateur de ligne de commande est présent.

Cela vous évite les erreurs possibles lors de la fusion ainsi que le temps nécessaire pour effectuer la fusion.

+0

hnf .. Je souhaite que c'était comme ça. Malheureusement, c'est un peu pire, les configurations sont intégrées dans le code lui-même. Eh bien techniquement, le "code" est un fichier de configuration complexe où une partie de son contenu traite de l'environnement où il est exécuté (le type de connexions, d'identifiants et de chemins). Ca ne peut pas être si difficile ... J'aimerais juste pouvoir faire quelque chose comme 'git diff master dev' et quand je clique sur save pour chaque fichier, les changements sont stockés dans la branche courante ... – filippo

Questions connexes