【问题标题】:How can I merge in Git without changing config files in master?如何在不更改 master 配置文件的情况下合并 Git?
【发布时间】:2016-10-13 16:19:46
【问题描述】:
【问题讨论】:
标签:
git
github
merge
gitattributes
【解决方案1】:
解决方法很简单:不要提交配置文件。
创建一个模板配置文件并提交它。安装应用程序时,复制模板并更改您需要更改的内容。将真实的配置文件保存在 .gitignore 中以避免意外提交。
高级用途是创建两个配置文件:应用程序默认值和本地覆盖。提交默认值,不提交本地覆盖。这种方法的好处是您只覆盖您需要的内容,而未指定其他值,因此当默认值更改时,您不必更新本地覆盖配置。缺点是您必须在应用程序初始化期间加载和合并两个配置文件。
【解决方案2】:
在研究了一些 git 命令如 rebase 和 fetch 之后,我找到了一个简单的方法来做到这一点。只需将分支创建为孤立分支,将配置文件复制到其中,然后使用命令“git checkout configs_branch --.”将配置文件复制到父分支。
那么详细:
使用 repo url 初始化 git repo
git remote add origin(远程仓库url)
确保您位于要从中创建分支的分支中
将包含配置文件的分支创建为孤立分支,以便该分支不包含您的所有源代码
git checkout --orphan configs_branch
将配置文件复制到 repo 的这个分支,添加文件、提交和推送
Git 添加。
Git commit -m "初始提交配置文件"
git push origin configs_url
成功合并后
来自父分支
git checkout 父分支名称
git fetch --all
将文件从配置分支复制到父分支
git checkout configs_branch -- .
(执行上述命令后,您仍将位于父分支上)
提交文件
git commit -m "重置配置文件"
感谢@vampire 的帮助!
【解决方案3】:
您无需编写脚本即可要求解决方案。我的解决方案包括脚本。但是,它们已经写好了。
1) 创建一个自定义合并驱动程序,它将忽略相应文件的合并冲突。必须为 .gitattributes 中的每个文件注册驱动程序
2) 在该文件中的每次提交时创建合并冲突(否则,合并是微不足道的并且不会使用合并驱动程序)。这可以通过 .git/hooks/post-commit 中的提交后挂钩来完成,该挂钩在每次提交后更改每个分支中的该文件。
我在一些脚本中结合了它:https://github.com/keepitfree/faithfulgit