我有一个包含两个 git 分支(开发和生产)的 Web 项目,每个分支都连接到不同的服务器(开发和生产)。每个分支都有一组跟踪的配置文件,例如不同的 URL、数据库选项、sql 导出文件等,这些在两个分支上都是不同的。
每次我尝试 merge 这些分支时,我都会在这些需要手动解决的设置文件中遇到很多冲突,但时不时地我会遗漏一些东西。简而言之,这是一场噩梦。因此,我的问题是,如何避免这种情况?
- 有没有办法防止在 merge 或 rebase 时对这些配置文件进行任何更改?*
建议的解决方案: “尝试使这些文件不被跟踪”。我试过了,但是每当我从生产文件中提取文件时,我都会删除并替换这些文件,所以我不知道是否应该以不同的方式进行.
最佳答案
这样做的方法是将 merge 策略注册为将始终使用当前版本的每个文件属性。以下是如何做到这一点(想法来自 this blog )
首先你注册一个 merge 驱动
- 什么也不做
- 成功退出。
shell 命令 true
正是我们要找的。以下行将 true
注册为 alwaysours
merge 驱动程序:
git config --local merge.alwaysours.driver true
接下来,我们需要告诉 git 哪些文件要使用这个伪造的 merge 驱动程序。这就是 .gitattributes
文件的用途。它支持与 .gitignore
文件相同的一小组文件模式。例如
/configs/* merge=alwaysours
*.conf merge=alwaysours
会对“/config”中的所有文件或所有以“.conf”结尾的文件使用我们的伪造 merge 驱动程序。将此文件也添加到您的 git 存储库中是有意义的
git add .gitattributes
以便跟踪对它的更改。但有一个警告:当您 merge 到一个具有 .gitattributes
文件的分支时,alwaysours
驱动程序也将在该分支上使用!为避免由此产生的任何问题,请在 所有 分支上为 .gitattributes
添加 alwaysours
merge 驱动程序。
echo '/.gitattributes merge=alwaysours' > .gitattributes
git commit .gitattributes -m 'Register alwaysours driver for .gitattributes'
当然,这会破坏对 .gitattributes
中任何其他设置的正确处理。
关于git - 如何防止跟踪的配置文件被 git 中的 merge 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116096/