Forum Programmation.autre [GIT] travail sur deux branches

Posté par . Licence CC by-sa
4
22
mai
2013

Bonjour,

J'aimerais vous demander conseil. Ce n'est pas un problème à résoudre, juste une question sur les bonnes pratiques.

Il y a une chose que j'adorais vraiment sur SVN, malgré tous les défauts que certains peuvent lui trouver. C'est la possibilité d'extraire une branche, et de faire en sorte que l'un ou l'autre fichier de cette branche soit d'une autre branche.

Exemple

Une quinzaine de personnes travaillent sur un bouquin en LaTeX (ou HTML…). L'équipe travaille sur le contenu du livre et poste une vingtaine de commit par jour. Moi je ne travaille pas du tout sur le contenu, mais seulement sur la forme.

J'aimerais donc pouvoir faire une copie de travail où les fichiers de contenu soient de la branche "master" et les sept ou huit fichiers de mise en forme soient de la branche "devel".

Autrement dit, j'aimerais pouvoir faire changer de branche à seulement quelques fichiers.

Discussion

D'après les recherches que j'ai pu faire, la chose n'est absolument pas possible avec GIT. J'ai résolu mon problème à grand coup de liens symboliques en deux clones différents et de modification de .git/info/exclude.

Bref… Du bricolage…

J'imagine que beaucoup d'entre vous rencontrent les mêmes problèmes. Comment faites-vous?

  • # Sous-module ?

    Posté par (page perso) . Évalué à 6.

    Personnellement je ferais un autre dépôt pour les fichiers de mise en forme et j'intégrerais ce dépôt en tant que sous-module dans le dépôt principal.

    It's a fez. I wear a fez now. Fezes are cool !

  • # sub-modules et subtree

    Posté par (page perso) . Évalué à 2.

    Déjà, je veux bien des liens vers le résultat de tes recherches. C'est toujours intéressant et ça évitera de refaire des discussions déjà faites ailleurs.

    Après, à ma connaissance, il n'est pas possible d'avoir un worktree qui corresponde à deux branches différentes. (enfin si, mais git va râler)

    Par contre il est possible d'avoir des dossiers dans une branche qui correspondent au contenu d'autres branches. Ça se passe soit avec submodules, soit avec subtree (http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/)

    Une solution serait donc:

    • Avoir une branche "contenu" . Plus d'éventuelles variantes ("contenu_master"/"contenue_devel"/"contenu_lang")
    • Avoir une branche "forme". Plus les variantes.
    • Avoir une branche "all" qui réunisse les deux (submodules, subtree, au choix, voir les deux en même temps). Tu peux avoir différentes branches "all" en fonction de tes besoins:

      • all_master qui merge les deux branches master
      • all_forme_devel qui merge la branche contenu_master et forme_devel (ce qui t'intéresse)

    Bien sur, c'est à adapter à tes besoins et de comment vous voulez travailler.

    De manière générale, quand j'ai deux "choses" qui évolue de manière plus ou moins indépendante, j'essaie d'avoir, au minimum, deux branches (voir deux dépôts, les branches étant des dépôts light) et je réunit à coté. Git a été fait pour avoir du branch/merge pas cher, autant l'utiliser :)

    Matthieu Gautier|irc:starmad

  • # Rebase

    Posté par . Évalué à 4.

    et avec un rebase ça ne pourrait pas le faire ?
    à chaque fois que tu te mets à bosser, tu te mets dans ta branche devel , tu fais git rebase master, et comme ça tu récupères les commits de master.

    enfin je dis peut-être une bêtise, ton cas est peut-être plus compliqué que ça ?

    • [^] # Re: Rebase

      Posté par . Évalué à 3.

      +1
      Plutôt qu'essayer de reproduire avec GIT a ce que tu faisais avant, mieux vaut essayer de "penser" git

      Ici les submodules apportent plus de complexité qu'autre chose.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.