git - 如何防止跟踪的配置文件被 git 中的 merge 更改?

标签 git repository git-branch

我有一个包含两个 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/

相关文章:

javascript - 如何将 Grunt 生成的文件添加到我的 Github 存储库?

java - Spring数据 Autowiring : Two bean candidates using @Autowired

git - 如何使用 git 分支来实现项目功能?

android - 如何在使用 Android 代码时使用 git 和 repo 工具创建分支

php - 错误 : cannot open . git/FETCH_HEAD:使用 php 脚本进行 git pull 时权限被拒绝

windows - Git 推送到远程服务器挂起使用 Cygwin

git - 在 GIT 中阻止和/或识别假作者姓名/电子邮件

c# - 在控制台应用程序中重用 DNN 数据库存储库

git - 将 repo 移动到另一台计算机

GIT:为什么我在使用 rebase 时需要解决我的 merge 冲突两次?