git workflow: puis-je empêcher la fusion d'un certain fichier dans une autre branche tout en maintenant le contrôle de la version?
j'ai un dépôt avec deux branches: live et stage. Le dépôt contient le code d'une application basée sur le web. Je voudrais en maintenir deux différents .les fichiers htaccess pour les branches stage et live, mais les gardent quand même sous contrôle de version, puisque la nature de servir un site stage est un peu différente (par exemple, en ce moment, je veux que les caches soient chronométrées différemment).
je suis novice avec git donc il y a probablement une explication facile, mais je voudrais avoir un flux de travail où quand j'étais en direct et j'ai tiré des changements (simple git merge stage
), Je n'ai pas écrasé l'existant .htaccess dans le live de la branche. Est-il possible de configurer cela? Est-ce que je manque un gros concept dans git?
de même, il y a aussi un morceau de a (mais peut-être beaucoup) .les fichiers html où je voudrais garder une trace des changements mais pas les fusionner à nouveau dans live. Juste pour être clair, je veux que live and stage garde trace des changements dans ces fichiers, mais je ne veux pas fusionner ces changements lors de fusions.
2 réponses
j'ai trouvé une réponse à une autre question sur le débordement de cheminée, le crédit va à fcurella:
disons que vous voulez exclure le fichier
config.php
sur la branche A:
créez un fichier nommé
.gitattributes
dans le même dir, avec cette ligne:config.php merge=ours
. Cela indique à git quelle stratégie utiliser lors de la fusion du fichier. Dans ce cas, gardez toujours votre version, c'est à dire. la version sur la branche que vous fusionnent.ajouter le
.gitattributes
fichier et commitsur la branche B: répéter les étapes 1-2
essayez de fusionner maintenant. Votre dossier devrait être laissé intact.
Cela semble être une solution plus évolutive.
Ankur, essayez ceci:
en supposant que vous êtes parti sur la branche en direct, courez:
git merge --no-commit --no-ff stage
cela va fusionner les deux branches, mais au lieu de faire une nouvelle propagation, va échouer et laisser ces changements dans votre fichier index et le répertoire de travail. Maintenant, puisque vous voulez garder votre fichier .htaccess
intact sur la branche live, vous pouvez vérifier ce fichier à partir de live:
git checkout live .htaccess
Maintenant, votre arbre de travail a tous les changements de l'étape à l'exception de .htaccess
, et ainsi vous pouvez finaliser la commit de fusion:
git commit -m "Pulled changes from stage" -a