Tom*_*ies 11 git version-control merge branch
我的情况:
我最近加入了一个已建立项目的前端,该项目涉及越来越多的rails应用程序实例,每个实例在某些方面(视图,样式,设置等)都有所不同,但它们都占有大多数他们的后端代码.
我们的Git repo有很多分支看起来像这样:
master
apple
banana
cherry
...
strawberry
tangerine
...
Run Code Online (Sandbox Code Playgroud)
每个水果派生分支都包含生产实例的生产代码.
(Master不用于实时部署,但包含所有共享代码,是我们从中设置新实例的克隆.)
我的问题:
特定于单个实例的工作很简单,发生在分支(或它的开发分支)等中......
但是,如果我需要进行一个会影响集群中所有站点的更改,我现在在dev分支中执行此操作并将其合并到master中,然后(什么在烦我)必须手动检查每个生产分支转而将master合并到其中.
即使我的谦逊代码猴脑也可以看出这不能很好地扩展.
目前我们有8个生产分支,所以它并没有那么糟糕,但计划是为了增长,到达20甚至20(更不用说50+)的时候,这将是一个严重的痛苦.这也将是我个人的痛苦,因为我是一个可能每天都在处理它的人.
所以,我的实际问题是:
如果后者能够帮助我开始/指出正确的方向吗?
非常感谢您的时间和帮助.
在我回答这个问题之前,我想非常清楚,在这种情况下,这只是一个好主意,其中要合并的分支是生产分支,而不是开发分支.如果你发现这篇文章正在寻找一种方法将集成分支(master)合并到你所有的主题(开发)分支中,答案是你几乎肯定不应该(见这里).
好的,真正的答案.没有内置的方式,因为(假设它不是快进的)你真的必须检查git的文件来做它的合并魔术.幸运的是,你实际上并没有做太多(git checkout && git merge)因此编写脚本没有问题.您可以使用配置文件使其复杂化,或者甚至添加一些自定义内容.git/config(例如git config branch.<branchname>.productionbranch true,然后使用git命令检查哪些分支设置了该标志),但最简单的方法是这样的:
#!/bin/bash
production_branches=( branch1 branch2 branch3 )
for branch in ${production_branches[@]}; do
if ! ( git checkout $branch && git merge master ); then
exit
# Exit on the first error
# If you want to just plow ahead, do something like this:
# git reset --hard # make sure there aren't merge conflicts in the tree
# failed_merges="$failed_merges $branch" # remember for later
fi
done
# if you plowed ahead above, print the branches which failed to checkout+merge
# if [ -n "$failed_merges" ]; then
# echo "Failed merges: $failed_merges"
# fi
Run Code Online (Sandbox Code Playgroud)
您可以一如既往地进行许多改进.例如,您可以使用一些git命令来检查master是否已合并到给定分支中,并避免将其检出.如果您正在继续过去失败的合并,您可以单独进行结帐并合并,以防结帐失败(这可能意味着工作树很脏,这意味着它们都会失败).希望这足以让你开始!
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |