我有一些相关的应用程序要部署到不同的计算机上。它们各自共享大量公共代码,并且具有一些独特的东西。例如,我有一个服务器和一个客户端,它使用很多公共类来相互通信。我有更多的服务器和客户端使用一些相同的类,但彼此无关。
简单的解决方案是将它们全部放在相同的目录结构中,这样它们就可以使用所需的任何模块,每当我部署服务器或客户端时,我都会放入整个代码库。但是代码库非常大,而且一些组件使用的数据文件大小只有几兆字节。
理想情况下,我可以让它们共享相同的代码,但能够准确地部署每个组件所需的文件......并且它们都连接到相同的版本控制。所以它就像是:
在一台计算机上:svn checkout client1
。在另一个:svn checkout server1
。在另一个:svn checkout client2
。然后,如果我修改了client2和client1之间共享的某些client2代码,那么当我执行svn update
时,这两个代码都会更新。理想情况下,我不必手动挑选我需要的文件,因为这可能很烦人,但我可以解决这个问题。
让其他人有这个问题吗?它有更好的名称吗?我可以用什么解决方案来解决它?
答案 0 :(得分:2)
当它可以在模块中分解时,请使用所有“基本”代码进行repo /分支,并在实际项目中将它们包含为svn:externals
(相同的存储库或另一个无关紧要) )。这样,您可以独立更新/处理模块,将某些项目固定到该模块的某些修订版或将它们保留为HEAD。
新项目要么需要对已经设置了大多数外部的基础项目进行分支,要么手动添加所需的外部。一个简单的shell脚本可以很容易地设置你需要的确切外部。