客户机-服务器Java项目的Git分支模型

客户机-服务器Java项目的Git分支模型,java,git,version-control,branch,Java,Git,Version Control,Branch,我有一个Java项目,它在两个需要分发的主要应用程序中使用一组通用代码:服务器和客户机。该项目分为以下几个包,每个应用程序都需要如图所示的包 Packages | Client | Server ------------------------------+--------+--------- com.example.game.server | No | Yes com.example.game.client |

我有一个Java项目,它在两个需要分发的主要应用程序中使用一组通用代码:服务器和客户机。该项目分为以下几个包,每个应用程序都需要如图所示的包

           Packages           | Client |  Server  
------------------------------+--------+---------
com.example.game.server       |  No    |  Yes
com.example.game.client       |  Yes   |  No
com.example.game.core         |  Yes   |  Yes
com.example.game.core.physics |  No    |  Yes
com.example.game.ui           |  Yes   |  No
com.example.game.utils        |  Yes   |  Yes
com.example.game.networking   |  No    |  Yes
org.library.sourcecode        |  Yes   |  Yes
我想将客户机和服务器作为jar分发,只包含相应应用程序的相关包,不包括任何不必要的代码。最好每个应用程序(服务器和客户端)都有一个git分支,其中每个提交代表一个发布版本(请参阅下面的答案)。整个项目(服务器+客户端)的所有提交历史都应该一起跟踪(意味着一个包含所有代码的“开发”分支?)。我该怎么做

请注意,我不想使用多个存储库,因为客户机和服务器代码紧密地联系在一起,应该在git中一起处理。

我的解决方案 这是我解决问题的办法;然而,这似乎非常重要 繁琐且难以贯彻执行。我的项目非常重要 比这个例子更复杂,规模更大,但事实并非如此 这似乎是一个很好的解决方案

请注意,我无论如何都不是Git的专家

master
分支将包含项目的所有源代码(每个包)。定期对该分支进行开发提交,功能和修补程序分支将合并到此分支上。一旦准备好发布,
master
分支将被重新设置到
releaseprep客户端
releaseprep服务器
分支上,该分支将作为删除相应应用程序的不必要包并准备发布的中点(不应添加任何功能)。一旦准备好发布,这些分支将被重新设置到各自的
release client
release server
分支上。这些“发布”分支上的每个提交都表示应用程序的生产就绪状态,并用版本号标记

这里有一个更好理解的图形(我是程序员,不是艺术家):