如何在Git中管理多个开发分支?

时间:2010-05-24 11:47:45

标签: git branch

我有一个系统的5个分支 - 让我们称他们为主人,伦敦,伯明翰,曼彻斯特和演示。它们仅在配置文件中有所不同,每个都有自己的一组图形文件。

当我进行一些开发时,我会从master创建一个临时分支,在该功能之后调用,并对其进行处理。当准备合并我checkout master和git merge功能带来我的工作。这似乎工作得很好。

现在我需要将其更改到其他分支中,而不会丢失它们之间的差异。我怎样才能做到这一点?伯明翰获得伦敦的图形以及配置文件中存在冲突,我一直没有遇到任何问题。

当分支最终正确时,我将其推送到一个软件仓库,然后将每个分支拉到Linux机器箱进行最终测试,从那里发布到生产中使用rsync(设置为忽略.git存储库本身) 。这个阶段也可以正常工作。

我是目前唯一的开发人员,但我需要在邀请帮助之前让流程稳固:)

3 个答案:

答案 0 :(得分:11)

两种技巧可以提供帮助:

  • submodules:如果您有5个“主电源项目”,每个项目由以下组成:
    • 公共代码(在功能之后获得增强功能)
    • 特殊代码(特定图形文件或配置值,每个站点一组)
  • template config files

因此,当您开发新功能时,您需要为其他网站所做的一切就是确保它们各自的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可以帮助您将图形文件和配置文件与目标配置相关联。

能够在没有任何结账的情况下构建所有配置也不错,不是吗?