我有一个系统的5个分支 - 让我们称他们为主人,伦敦,伯明翰,曼彻斯特和演示。它们仅在配置文件中有所不同,每个都有自己的一组图形文件。
当我进行一些开发时,我会从master创建一个临时分支,在该功能之后调用,并对其进行处理。当准备合并我checkout master和git merge功能带来我的工作。这似乎工作得很好。
现在我需要将其更改到其他分支中,而不会丢失它们之间的差异。我怎样才能做到这一点?伯明翰获得伦敦的图形以及配置文件中存在冲突,我一直没有遇到任何问题。
当分支最终正确时,我将其推送到一个软件仓库,然后将每个分支拉到Linux机器箱进行最终测试,从那里发布到生产中使用rsync(设置为忽略.git存储库本身) 。这个阶段也可以正常工作。
我是目前唯一的开发人员,但我需要在邀请帮助之前让流程稳固:)
答案 0 :(得分:11)
两种技巧可以提供帮助:
因此,当您开发新功能时,您需要为其他网站所做的一切就是确保它们各自的repo引用最新的公共代码仓库作为子模块。只需要git submodule update
即可完成。
另外,使用模板配置文件,您存储的所有内容都是config 值,而不是实际的配置文件本身(它们会生成)。
这使您可以对每个站点进行微调,而无需“忽略”本地修改。
总结:不要试图在一个仓库中管理所有方面(公共代码,配置文件,特殊文件......)(包含所涉及的所有合并和rebase),试试模块化你的应用程序。
答案 1 :(得分:4)
git rebase
是你的朋友。
像往常一样在主分支中进行更改。当你完成后,检查你的其他分支(比如伯明翰)并运行
git rebase master
。 git将在当前提交和伯明翰所基于的提交之间引入您在master上所做的更改。在interweb上有关于命令的好文件。这是我找到的两个
http://darwinweb.net/articles/86
http://www.eecs.harvard.edu/~cduan/technical/git/git-5.shtml
还有很多其他人。你会发现很多人都在谈论变基的危险。注意这些担忧,但我怀疑这些好处远大于你的风险;并且知道危险是成功的一半。
答案 2 :(得分:1)
另一种技巧:
一旦您的新功能在master
中,请将master合并到所有其他相关分支。
原始状态:
o---o-master
\
o-London
master中的新提交:
o---o---o-master
\
o-London
使用git checkout London; git merge master
:
o---o---o-master
\ \
o---o-London
但请注意,这可能很麻烦,特别是如果分支数量增加。 我对你的系统一无所知,但是如果你可以在一个分支中拥有所有配置,那么它可能会更容易(我的意思是你的文件系统中总是存在所有五个配置文件和图形文件)。
例如,使用makefile,您可以根据当前目标配置选择要编译和链接的源文件。在您的情况下,makefile可以帮助您将图形文件和配置文件与目标配置相关联。
能够在没有任何结账的情况下构建所有配置也不错,不是吗?