问题:将dev
合并到main
时,如何使它们在各自的分支上提交.ebextensions
和.elasticbeanstalk
,但在合并过程中从不相互覆盖?
要求:我希望从dev
签出新的主题分支,并将它们合并回dev
,因此这些主题分支需要相同的.ebextensions
和.elasticbeanstalk
文件夹才能与它们一起。
景观:与Github合作弹性豆茎的Flask项目。
我有两个主要的branches
- main
- dev
我为一个弹性豆茎环境设置了dev
,在另一个环境中设置了main
。这意味着我有两个版本的.ebextensions
和.elasticbeanstalk
文件夹。
.
├── application.py
├── .ebextensions
├── .ebignore
├── .elasticbeanstalk
├── .gitignore
├── main.py
└── .vscode
我一直把文件弄乱,不得不把它们写回本地,然后再次推到远程来修复它们。
在阅读了大约三分之一的git-scm.com's
书之后,我认为解决方案将涉及"onbranch:" includeIf
,但这个例子很难遵循。
我肯定错过了什么,这不是一个罕见的要求。
您似乎已经找到了一个可能的解决方案,但我想提出一个替代解决方案,将Git设置为从不覆盖特定文件。
这可以通过创建一个与文件模式匹配的.gitattributes文件,然后创建一个伪合并策略来实现。
关于这种方法的更深入的讨论可以在这里找到,这里有更多信息。
我相信在你的情况下,你可以做一些类似的事情
git config --global merge.ours.driver true
echo ".ebextensions/* merge=ours" >> .gitattributes
echo ".elasticbeanstalk/* merge=ours" >> .gitattributes
请注意,我不确定用通配符传递孔目录是否有效,尽管我认为这应该是可能的。
当你在Git中执行操作时,几乎所有操作都只向Git数据库添加数据这是我读过的一行,但在试图解决这个问题时没有应用。
感谢@torek的澄清。
我的摘要解决方案是存储所有文件
所以现在我的文件结构看起来像
.
├── application.py
├── .ebextensions-dev
├── .ebextensions-main
├── .ebignore
├── .elasticbeanstalk-dev
├── .elasticbeanstalk-main
├── .gitignore
├── main.py
└── .vscode
当我想将应用程序部署到dev
弹性豆茎环境时:
- 从
.ebextensions-dev
和.elasticbeanstalk-dev
文件夹名称的末尾删除-dev
files='.elasticbeanstalk .ebextensions'
x='-dev'
for i in $files; do
mv $i$x $i
done;
- 运行
eb deploy
- 将
-dev
添加回.ebextensions
和.elasticbeanstalk
文件夹名称的末尾
files='.elasticbeanstalk .ebextensions'
x='-dev'
for i in $files; do
mv $i $i$x
done;
main
反之亦然