2017-03-28 1 views
1

Dans notre société, nous avons des versions alpha et bêta, lorsque nous sommes sur le point de publier une nouvelle version, nous faisons un alpha git merge (sur une branche beta), donc nous fusionnons tout alpha en beta. Le problème avec cette approche est que nous avons des fichiers de configuration qui ne devraient pas être fusionnés en beta, qui sont alpha (et autres branches de développement) seulement, mais ne devraient pas non plus être ignorés, ni appartenir à un autre dépôt car après tout, ils appartiennent à cette branche spécifique.Fusion de branches mais suppression de certains fichiers

Ainsi, la solution « idéale » serait quelque chose comme:

fusion git alpha -commit à ignorer

ou tout simplement définir les fichiers spécifiques à ignorer quand et seulement lors de la fusion.

Vous ne savez pas si ces options existent ou si c'est la meilleure approche.

Répondre

1

Si les modifications dans les fichiers de configuration en alpha et bêta branche sont ils mutuellement exclusifs à savoir provoquer un conflit, alors vous pouvez simplement fusionner à l'aide ours stratégie de fusion

git merge -s ours alpha 

Sinon, solution la plus simple serait de créer une nouvelle branche de alpha. Supprimez les fichiers de configuration que vous ne voulez pas fusionner, validez les modifications et fusionnez la nouvelle branche en version bêta. Cependant, avec cette approche, si vous finissez par fusionner la version bêta en version alpha, vous perdriez également les fichiers de configuration en version alpha dans le cas d'une fusion Fast Forward.

Plus préférable solution serait de créer un commit séparé en alpha qui contient les changements de configuration, maintenant vous pouvez fusionner/rebaser le reste de la branche en bêta, sauf que valider.

Si les modifications dans les fichiers de configuration est Si la validation se situe quelque part entre alors vous devez rebase --onto pour supprimer ce commettras particulier le dernier commit, vous pouvez facilement le faire comme suit

git checkout -b temp_branch HEAD~1 
git checkout beta 
git merge temp_branch 

, puis fusionner. Pour expliquer, disons que vous avez

>> git log --oneline 
2c10ba8 latest commit 
088a38e config commit 
c233f51 some other commit 

>> git checkout -b temp_branch 

# Now you need to remove 'config commit' with hash id 088a38e 
>> git rebase --onto c233f51 088a38e 2c10ba8 
# resolve if any conflict occurs 

# Now your git log should look like shown below, with undesirable commit removed 
>> git log --oneline 
2c10ba8 latest commit 
c233f51 some other commit 

>> git checkout beta 
>> git merge temp_branch 
+0

« solution plus préférable serait de créer une commettras séparée alpha qui contient les changements de configuration, maintenant que vous fusionnez le reste de la branche en bêta, sauf que commettras. » <- comment faites-vous cette fusion sans ce commit? :) Quand vous faites une fusion de git, le nom de branche git prend tout, ce fichier inclus. – Artemix

+0

Si toutes vos modifications indésirables sont dans un seul commit, alors vous pouvez le faire. – hspandher