Git - comment la force de conflit de fusion et fusion manuelle sur le fichier sélectionné
Nous maintenons application web qui a du bon la branche principale, et de nombreuses branches parallèles, un pour chaque installation, chaque avoir quelques changements spécifiques. Le code Source est géré dans git et il est formidable outil lorsque nous avons besoin de transfert de fonctionnalités et corrections de branche master en parallèles. Mais rares sont les fichiers qui sont sensibles et automatique de la fusion de l'habitude de donner de mauvais résultats. Donc, la fusion serait beaucoup plus facile si elles peuvent être en quelque sorte marqué et chaque fusion entraînerait des conflits nécessitant une fusion manuelle.
J'ai cherché une réponse :
- Je suis en utilisant --no-commit et --no-ff options de fusion, mais il n'est pas le même.
- Ici et ici quelqu'un pose la même question, mais avec pas de solution.
- Cas similaire semble être comment prévenir le fichier fusionné à l'aide .gitattributes contenant: somefile.php fusion=nôtre . J'ai essayé de trouver certains de fusion option qui permettrait de générer des conflits ou de force manuel de fusion, mais aucune n'a été trouvée jusqu'à présent.
- .gitattributes contenant: somefile.php -fusion n'est jamais fusionnées automatiquement et donc de forçage manuel de fusion. Il est de 90% de la solution, mais ce que je cherche, c'est d'essayer automatique de la fusion et de la marquer comme conflit, peu importe c'est réussi ou pas. Mais c'est de loin le plus proche de la solution. (...grâce Charles Bailey pour des précisions...)
- Quelqu'un suggère d'écrire une fusion personnalisée pilote (Un, Deux), mais comment faire, il est loin d'être claires pour moi.
edit: variante 4. description
- Ce ne serait pas la réponse exacte que vous cherchez, mais pour la même raison que je ne
git fetch
d'abord, puis utilisergit difftool <file> FETCH_HEAD
, afin que je puisse appliquer manuellement le changement de la distance direction générale de la section locale. - CMH: c'est la tour de nice (surtout s'il est enregistré dans le script pour chaque branche parallèle + combiné avec la prévention des fichiers à partir d'automatique de fusion). Principal inconvénient, c'est que dans l'équipe de workflow, les chances sont que quelqu'un oublie cette étape et tout à fait normal de fusion à la place.
- Réglage
-merge
ne vous empêche pas de fusionner les fichiers, c'est juste vous oblige à le faire manuellement, par exemple avec un mergetool. N'est-ce pas ce dont vous avez besoin? - C'est 90% de ce que je veux. Je voudrais que la fusion se fait automatiquement, mais pour ce de fichiers sensible à la fusion est considéré comme un conflit, même quand il n'y a pas de contrôle manuel est forcé de tous les temps.
- Je suis dans une situation similaire, donc je tiens à préciser quelque chose. Ce que vous dites que, avec
-merge
dans.gitatttributes
git merge
ne fait rien, et tous les travaux doivent être vers le bas avec l'outil de fusion? Donc, il n'y a pas de <<<<< ===== >>>> pour l'outil de fusion à utiliser, non? Et Dan la solution de ne fournir cette?
Vous devez vous connecter pour publier un commentaire.
De l'Option 5, une coutume de fusion pilote, est probablement la façon d'obtenir le plus proche de ce que vous voulez. Il est étonnamment facile à faire. Ci-dessous est un exemple de quelqu'un qui je pense, devrait vous obtenir assez proche du comportement que vous désirez.
Tout d'abord, créer une fusion pilote script appelé
merge-and-verify-driver
. Le rendre exécutable et de le mettre dans un endroit approprié (vous pouvez envisager de vérification de ce script dans le repo, même, depuis le repo de fichier de configuration va en dépendent). Git va exécuter ce script shell pour exécuter la fusion des fichiers sensibles:Cela n'a tout simplement la fusion par défaut le comportement que Git se fait normalement. La principale différence est que le script renvoie toujours non nulle (à indiquer qu'il y a un conflit, même si la fusion a été effectivement résolu sans conflits).
Ensuite, vous devez indiquer à Git au sujet de l'existence de votre coutume de fusion pilote. Pour ce faire, dans le repo de fichier de configuration (
.git/config
):Dans cet exemple, j'ai mis
merge-and-verify-driver
dans les pensions de titres du répertoire de niveau supérieur (./
). Vous aurez besoin de spécifier le chemin vers le script en conséquence.Maintenant, vous avez juste besoin de donner les fichiers sensibles les attributs appropriés de sorte que la coutume de fusion pilote est utilisé lors de la fusion de ces fichiers. Ajoutez ceci à votre
.gitattributes
fichier:Ici, je l'ai dit à Git que n'importe quel fichier avec un nom correspondant au modèle
*.sensitive
devrait utiliser l'outil de fusion de pilote. Évidemment, vous devez utiliser le modèle approprié à votre fichier(s).git checkout -m *filename*
invoquer la fusion pilote? Si oui, il ne fonctionne pas pour moi. 🙁Remarque: cet article "L'écriture d'un git merge pilote pour les fichiers PO" illustre le type de manipulation que vous pouvez le faire manuellement la fusion d'un fichier: vous pouvez pré-traitées dans l'ordre de votre manuel de fusion et d'avoir certaines données prêt.
git merge-fichier
peut être utilisé, par exemple, à DÉCHIFFRER (et re-chiffrer) des fichiers avant de les fusionner (!)Dans votre cas, la sortie de la fusion de pilote avec un non-0 état de s'assurer que la fusion sera un manuel.
Ces deux commandes semble avoir le même effet que l'utilisation de la coutume de fusion pilote:
La première commande s'arrête à la fusion avant la création de la fusion de commettre, et la seconde les marques de tous les fichiers modifiés dans les deux branches comme un conflit à résoudre, même si il n'y avait pas de conflit à l'origine.