2009-11-02 4 views
1

Je ne sais pas si ce que je suis en train de faire est logique, mais voici l'explication:Git: howto fichier fusion manuellement à partir de travail arbre avec un fichier de HEAD

J'ai quelques fichiers source qui sont générés par un outil, puis a changé un peu et commis. Ce qui se passe, c'est que parfois j'ai besoin de régénérer ces fichiers.

Je dois faire une fusion manuelle de ce nouveau fichier avec celui qui a été précédemment validé et choisir les parties à prendre de l'ancienne version et les parties à prendre de la nouvelle version.

Existe-t-il un moyen de le faire?

Merci!

Répondre

4

Vous pouvez créer une branche telle que "generated_files" ce que vous ne touchez jamais mais lorsque vous générez vos fichiers.

Dans votre branche "maître", vous pouvez fusionner la branche "fichiers_générés".

Chaque fois que vous générez de nouveaux fichiers, vous devez le valider dans la branche "fichiers_générés" qui créera un nouveau delta à partir de la version précédente générée.

Si vous fusionnez après cette branche dans "maître", cela n'appliquera que le delta de la version précédente et gardera votre modification.

Peut-être que vous pouvez utiliser une stratégie pendant la fusion pour éviter les conflits.

+0

Excellente suggestion. Cela va fonctionner et économiser beaucoup de temps. Merci. – ivans

+0

Et maintenant, après avoir testé cela en pratique, je dois dire merci encore. Fonctionne très bien! :) – ivans

4

Essayez quelque chose comme:

  • clone git

  • branche git -a "temp"

  • temp git checkout

  • ... générer de nouveaux fichiers ..

  • git ajouter .

  • git commit -m "commit texte"

  • git checkout maître

  • température de fusion git

Essentiellement, faites vos affaires dans l'autre branche et simplement merge branchez à la branche principale.

1

Une façon de le faire est d'utiliser -m option « git checkout »:

  1. Vérifiez la version de base (ancêtre) , par exemple, si vous voulez faire un trois fusionner chemin entre la version actuelle (HEAD), version précédente (HEAD ^) et le fichier généré (dans le répertoire de travail):

    git checkout HEAD^ 
    

    ne vous inquiétez pas d'avertissement au sujet de HEAD détaché.

  2. Générez vos fichiers

  3. Utilisez l'option -m de "git checkout" pour fusionner les changements de la zone de travail:

    git checkout -m @{-1} # or "git checkout -m <branch>" 
    

De git checkout manpage:

- m ::
--merge ::

Lors du passage des branches, si vous avez des modifications locales à un ou plusieurs fichiers qui sont différents entre la branche courante et la branche à laquelle vous échangez, la commande refuse de changer branches afin de préserver vos modifications en contexte. Cependant, avec cette option, une fusion à trois voies entre la branche courante, le contenu de votre arbre de travail et la nouvelle branche est effectuée, et vous serez sur la nouvelle branche.

Non testé! commande


comme solution de repli vous avez toujours faible niveau git merge-file (plomberie).

Questions connexes