git - Merge 分支时,如何保持指定的文件不被 Merge?
高洛峰
高洛峰 2017-04-28 09:06:32
0
1
1028

就像SO上这个问题描述的场景: http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-sp

有两个分支,每个分支使用不同的配置,例如:

config.txt (on release branch):
database = 10.9.8.7

config.txt (on develop branch):
database = 192.168.0.1

当需要把develop分支的功能合并到release分支时,不希望config文件被合并;
有以下几种解决方案:

  1. 使用merge strategy;创建一个merge driver,对指定的文件使用指定的merge strategy;
    缺点:文件无改动时,merge driver不会启动,还是会被合并;rebase不管用;
  2. 提交时,使用assume-unchanged;
    缺点:提交时需要时刻关注文件改动;
  3. 使用subtree(submodule)

不知道大家有没什么建议?

参考: http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-sp

http://stackoverflow.com/questions/2250040/using-github-to-host-public-git-repositories-whilst-ensuring-that-sensitive-data#

http://blog.miniasp.com/post/2014/12/23/Git-Advanced-Assume-Unchanged-Skip-worktree.aspx

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(1)
过去多啦不再A梦

Il est plus facile de gérer les fichiers de configuration pour différents environnements s'ils sont placés dans des fichiers différents

//config.txt
#默认生产环境
database = 10.9.8.7

//config.dev.txt
#开发环境
database = 192.168.0.1

//config.test.txt
#测试环境
database = xxx

Le jugement de l'environnement est effectué dans le code (les méthodes courantes incluent l'adresse IP, le nom d'hôte, les variables d'environnement, etc.) et différentes configurations sont lues séparément

Une autre solution consiste à disposer d'un centre de configuration dédié chargé de l'émission des configurations et d'un elfe résident chargé de trouver le centre de configuration pour extraire les configurations, mettre en cache les configurations et coopérer avec le centre pour mettre à jour les configurations, etc.

En bref, je pense personnellement que maintenir les configurations de différents environnements à travers différentes branches permettra d'obtenir la moitié du résultat avec le double du résultat... Si vous ajoutez l'environnement de test, l'environnement de pré-version et peut-être même l'environnement de test unitaire, environnement sandbox, etc., s'il y a plus de 3 configurations différentes, ce sera toujours le cas. Si vous utilisez la maintenance de branche, elle s'effondrera essentiellement... Si vous devez le faire, il est recommandé d'imiter la forme de phpunit.xml.dist, gitignore out config.txt, puis maintenez le config.txt.dist officiel Dans le code, lisez d'abord config.txt, puis lisez config.txt.dist

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal