describe - git tag convention



fusion partielle de git, pas de branche entière (3)

J'ai lu quelques astuces concernant la fusion dans Git: fusionner des branches publiques et privées tout en préservant certains fichiers intacts dans les deux branches et sans trouver de solution.

Dans mon cas, je ressens le besoin de faire la stratégie de fusion opposée. Dans le développement parallèle, je dois garder certains fichiers identiques dans les branches arbitraires. D'un autre côté, je ne veux pas faire de fusion squash ou sans engagement, alors que les différences sont importantes et pourraient briser l'état actuel de la branche testing.

Ce que je veux quelque chose comme

git checkout testing

git merge config.xml -b development ou git merge config.xml -b development git merge config\*.xml -b development

Je suppose que cela ressemble à la commande git merge-files ... , mais que le second fichier est livré par la branche, pas par le système de fichiers. C'est possible? ou peut-être il y a une sorte de solution de contournement? sous-modules? les attributs?

Merci


Answer #1

Fondamentalement, vous pouvez tous lire après ici: http://www.gelato.unsw.edu.au/archives/git/0701/37964.html

En bref, si vous souhaitez simplement appliquer les modifications apportées par une certaine plage de validations (il peut également s'agir d'une seule validation), apportées à un sous-ensemble de fichiers uniquement, procédez comme suit:

git diff commit1..commit2 filepattern | git apply --index && git commit

Answer #2

Il est possible de fusionner avec un fichier directement tiré de l'arborescence git.
Ce que je suggère est de faire quelque chose comme:
$ git ls-tree development -- config.xml
$ git show <blob-hash> > config.xml.development

Ensuite, obtenez la base commune:

$ git ls-tree $(git merge-base HEAD development) -- config.xml
$ git show <blob-hash> > config.xml.base

Et enfin :

$ git merge-file config.xml config.xml.base config.xml.development

Je n'ai pas testé cela, cependant.

Avec un shell comme zsh, vous pouvez éviter de sauvegarder le blob dans un fichier temporaire avec ceci:

$ git merge-file config.xml =(git show <base-blob-hash>) =(git show <dev-blob-hash>)


Answer #3

Voici un référentiel avec une documentation étape par étape pour clarifier les dangers de la fusion partielle et indiquer le bon chemin.

https://gitlab.com/bimlas/learning-by-testing-git-partial-merge/tree/doc

TL; DR:

La fusion est ce qu’elle est: l’union de branches. Si vous effectuez une validation de fusion sans fusionner tous les fichiers et que vous essayez de fusionner les mêmes branches ultérieurement, Git pense que vous avez tout fusionné lors de la première validation de fusion; avant la première fusion.

Utilisez la checkout pour copier des fichiers d’une branche à une autre:

git checkout BRANCH -- FILE
git commit -m "Partial merge"




merge