如何在dev和github的主要分支和子分支中维护单独的文件



问题: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弹性豆茎环境时:

  1. .ebextensions-dev.elasticbeanstalk-dev文件夹名称的末尾删除-dev
files='.elasticbeanstalk .ebextensions'
x='-dev'
for i in $files; do
mv $i$x $i
done;
  1. 运行eb deploy
  2. -dev添加回.ebextensions.elasticbeanstalk文件夹名称的末尾
files='.elasticbeanstalk .ebextensions'
x='-dev'
for i in $files; do
mv $i $i$x
done;

main反之亦然

最新更新