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.

23
demandé sur Ankur 2010-12-23 06:40:57

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:

  1. 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.

  2. ajouter le .gitattributes fichier et commit

sur 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.

32
répondu Ankur 2017-05-23 12:10:33

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
6
répondu Hakop Palyan 2010-12-23 05:10:06