如何使用Git管理不同路径配置的分支并同步功能更新?
Git多分支保留差异化配置同步代码方案
你提出的需求完全可以通过Git实现,以下是两种不同场景的推荐方案:
方案一:长期最优解(推荐使用)
核心逻辑是把环境配置和业务代码解耦,从根源避免分支间的配置冲突问题:
- 抽离可变配置到独立文件:在项目中新增
config.sh存储所有环境相关的路径配置,内容示例:
# config.sh 仅本地保留,不提交到Git image_dir=/home/image/
- 修改
bash.sh引入配置文件,删除硬编码的路径:
# bash.sh 代码中不再写死路径 source ./config.sh # 后续业务代码直接使用$image_dir变量
- 将
config.sh添加到.gitignore文件,避免不同环境的配置互相覆盖,同时可以提交config.sh.example模板文件,标注需要修改的配置项。
调整完成后,master和share分支的业务代码完全一致,不需要维护差异化内容,所有功能更新直接正常合并即可。
方案二:现有分支架构临时解决方案
如果暂时不想调整代码结构,可通过以下操作实现代码同步同时保留配置:
单次同步操作步骤
- 切换到share分支:
git checkout share - 拉取最新的master分支代码:
git fetch origin master - 执行合并操作,添加
no-commit参数避免自动提交:git merge --no-commit master - 此时Git会提示bash.sh存在冲突,仅需要保留share分支的
image_dir=/share/image/配置行,其他改动全部保留master分支的新增内容即可。 - 确认代码无误后提交合并结果:
git commit -m "同步master分支新增功能"
自动化冲突处理配置
如果每次冲突仅为image_dir路径行,可配置自定义合并规则实现自动处理:
- 在项目根目录新建
.gitattributes文件,添加以下内容:
scripts/bash.sh merge=keep_share_config
- 执行Git配置命令,定义合并规则:
git config merge.keep_share_config.name "自动保留share分支的image_dir配置" git config merge.keep_share_config.driver "sed -i 's|^image_dir=.*|image_dir=/share/image/|' %A"
配置完成后,后续合并master分支到share分支时,Git会自动将bash.sh中的image_dir路径替换为share分支的对应值,无需手动解决冲突。
内容的提问来源于stack exchange,提问作者cnyt
相关产品推荐
相关产品推荐

