使用Git功能分支并同时使用(?)分支

时间:2010-11-30 05:39:38

标签: git

我是Git的新手,有时候我发现自己正在处理一个功能分支(比如添加库A),同时也在使用它的程序B(我称之为use分支,也许有一个更好的词) 。所以我过去所做的就是有两个独立的分支,在功能分支上工作直到看起来它可能工作,然后开始在使用分支中使用API​​,合并功能分支并查看它是否有效。如果它不起作用,我将返回功能分支,修复问题,合并并重复。这是最好的方法吗?

我的目标是将功能分支与使用它的任何实现分开(尽管我认为即使是辩论也是如此)。我后来还想到的是假设我正在编辑有限数量的文件,我可以在use分支中执行'修复'更改,并在功能分支中使用'git checkout'来重新引入库更改。 / p>

我想我真正想要的是在单个工作区中工作,但是指定这些文件属于分支A,并且这些文件属于分支B并且能够单独提交它们。 (我可以想象一个实现,你指定2(或n)个分支组合成一个伪分支,假设你不改变相同的文件。然后当你更改一个分支中的文件时,你可以只提交那些文件到那个分支(如果你修改新文件,你必须指定这个文件'属于'的分支))。据我所知,这可能与Git的运作方式有所不同,但我不知道这一点。 :)

思想?

澄清/补遗:

  • 这是一个存储库中的单个程序(尽管可能有两个存储库)
  • 我目前正在使用两个分支
  • 示例(实际上并不是我在做什么:)): 我正在编写一个程序来生成一个随机数,然后将其写入文件。所以我的主程序在它自己的分支中(我称之为我的'use'分支)。我的主要计划是:

    MyFileApi :: Write(“myfile”,random());

    其中random()是已经存在的一些系统API,但MyFileApi :: Write是我正在开发的新功能(所以我的程序正在使用这个新功能)。在我的“功能分支”中,我已经说过MyFileApi :: Write的头文件和实现。所以我写了一些MyFileApi :: Write的实现,但是我想用我的新随机数文件编写器程序来测试它(最好是专门为这个API编写测试,但我很懒惰并在我使用该代码的程序中测试它。所以我一直在做的是将我的MyFileApi :: Write更改合并到我的'use'分支,测试它,看到它失败,回到我的功能分支,修复问题,再次合并,重复等...... < / p>

    2 个答案:

    答案 0 :(得分:2)

    没有什么可以阻止您两次克隆存储库,因此您有两个本地工作区,每个分支一个。如果功能分支的构建输出需要在使用分支中,则可以始终使用符号链接(假设您使用的是Unixy OS)并使用.gitignore来自use分支。

    然而,如果这些是两个不同的程序(听起来像它们)那么它们根本不应该在不同的分支上 - 它们应该位于两个分支中的同一目录树中,或者它们应该是分开的完全存储库。将一个分支专门用于一个程序而一个分支专用于另一个程序并不是一种好的风格(除非它们是发布分支或类似特殊的东西)。

    答案 1 :(得分:1)

    我不是git guru,但理论上你可以拥有任意数量的分支。假设您在自己的git仓库中拥有库A并且在其自己的git仓库中使用程序B(使用A),我会建议:

    • 在A
    • 中创建分支(例如“new_features”)
    • 修改代码,尝试编译/链接,修复错误
    • 在B
    • 中创建一个分支(使用相同的名称来显示将要测试的内容 - “new_features”)
    • 修改B中的代码以使用您在A
    • 中添加/更改的新功能/已修改功能
    • 编译/链接/测试B

    如果您对库A所做的更改更改其公开的函数/变量集,您确实需要在程序B中使用该分支。如果您所做的只是对“后台”代码进行更改(即,在改进这些函数中的算法,内存使用等等的同时保留已公开的函数/变量),则不一定需要B的分支程序

    无论如何,如果您对两个项目进行分支,首先转到您的A库并将您的分支合并回主干。编译/链接/修复错误。然后转到B并将其各自的分支合并到该项目的主干上。再次,编译/链接/修复错误。

    我实际上不得不用我正在开发的项目之一做这样的事情;有一个主要的应用程序,使用各种共享库。我们使用SVN,但概念基本相同。