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

Max*_*xym 5 git version-control

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

/src/class1.java  
/src/class2.java  
/res/image1.png  
/res/image2.png  
Run Code Online (Sandbox Code Playgroud)

第二个项目包含

/src/class1.java  
/src/class3.java  
/res/image1.png  
/res/image3.png  
Run Code Online (Sandbox Code Playgroud)

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

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

Von*_*onC 3

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

呃……不。
当您创建分支时,这实际上意味着任何文件的任何未来提交都将记录在该新分支中。
因此,如果您不触及 to class1.java,其提交仍将被原始分支(例如“ common”)引用,而所有内容都将在分支“ ”中class2.java被删除和添加。任何从中 创建分支的人实际上都会重用。class3.javaproject1
project2commonclass1.java

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

呃...不二:开发人员必须挑选class1.java并将其合并到分支“ common”,然后将所有其他分支重新设置为基础common才能看到class1.java演变。

真正的解决方案是git submodules有关子模块更新方式的更多信息,请参阅此处),但这涉及:

  • 代码的重组:
    项目
      源代码
        类3.java
                       # 这是一个完整的 git 仓库
      common # = 在“项目”存储库中引用
                       # 作为子模块
        源代码
          类1.java
  • 每当修改时,仍然会推送到“通用”Git 存储库class1.java,并且需要新的“通用”演变的所有其他分支/存储库中的 git 子模块都会更新。