git +分支/存储库之间的部分共享文件。可能吗?

时间:2010-02-26 22:45:19

标签: git version-control

我工作的公司中的一个团队存在以下问题。他们开发了一个应用程序,它将具有不同的构建(例如,取决于客户的不同设计)。所以他们有一些代码在构建之间共享,一些特定于构建。例如。第一个构建有(例子对于文件没有意义,只是为了理解问题;我不确切知道哪个代码不同)

/src/class1.java  
/src/class2.java  
/res/image1.png  
/res/image2.png  

第二个项目包含

/src/class1.java  
/src/class3.java  
/res/image1.png  
/res/image3.png  

如你所见,都有class1.java和image1.png。别的东西是不同的。当然,项目要复杂得多,所以在一个项目中包含所有东西都不舒服......而且要制作不同的分支并将相同的代码提交给所有这些代码并不舒服......

可能我选择了错误的方向思考这个问题,但我只是看了一下git(我们使用svn),它允许分离的存储库。问题是:是否有可能在git中创建不同的分支,但告诉它“这些文件应该在它们之间共享”,其他文件应该只在那些分支中。然后当开发人员提交class1.java时,git会在所有分支/ repositorias等中同步它。也许还有另一种解决方案可以轻松采用?

1 个答案:

答案 0 :(得分:3)

  

是否可以在git中创建不同的分支,但告诉它“这些文件应该在它们之间共享”,其他文件应该只在那些分支中。

呃......不 当您创建分支时,这实际上意味着任何文件的任何 future 提交都将记录在该新分支中。
因此,如果您未触及class1.java,其提交仍将由原始分支引用(例如“common”),而class2.java将被删除,class3.java }添加,全部在分支“project1”中 任何从project2创建分支common的人实际上都会重用class1.java

  

然后当开发人员提交class1.java时,git会在所有分支/ repositorias等中同步它

Err ... no bis:开发人员必须挑选class1.java并将其合并到分支“common”,然后在{{1}之上重新绑定所有其他分支为了看common进化。

真正的解决方案是git submodules(参见here for more on the way submodules are updated),但这涉及:

  • 重新组织代码:
    project
      src
        class3.java
                       #   here is a full git repo
      common           # = referenced within the 'project' repo
                       #   as submodule
        src
          class1.java
    只要class1.java被修改,
  • 仍然会推动'共同'Git仓库,并且git子模块会在需要新的“共同”进化的所有其他分支/回购中更新。