问题:我们为银行开发系统。这些系统(理论上)是高度安全的,并且几乎总是受到相当严格的 NDA 的保护。因此,虽然各个项目之间有一些共享代码,但其中很多是完全独立的。也就是说,如果一个项目的代码或文档“渗入”到另一个客户拥有的另一个项目中,那将是灾难性的。两个客户要求我们将代码推送到他们的仓库(我们的合同要求的一部分),加剧了这个问题。
迄今为止,我们只是为每个客户使用了一个完全独立的 repo。当然,这意味着在某些情况下,我们有相同代码模块的重复;如果在一个存储库中进行更新而不分发给其他存储库,则更改/修复将不可避免地丢失。如果我们只需要维护一份此类文件的副本会更好。
当然,另一种方法是为每个客户端使用一个分支,但我发现分支之间合并的开销是不支持的。此外,我查看了 git 子模块,但同样,这些似乎太危险了,因为粗心的提交可能会构成项目之间的“中国墙”,而合并似乎比仅仅通过分叉更复杂该项目(参见http://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/)。我讨厌实现开发人员必须记住特定程序的系统,因为当事情匆忙完成时,错误是不可避免的。
显然,一等奖将是拥有一个单一的存储库,但只有某些目录或文件被上传到特定的远程存储库。虽然我很欣赏这可以在一定程度上通过使用.gitignore和每个客户端的单独分支来实现,但我担心手指问题(如果有人不恰当地编辑 .gitignore 文件)可能会导致我正在尝试的事情避免。
我们几乎所有的开发平台都是基于 Linux 的,但一个遗留系统的开发环境只能在 Windows XP 上运行,并且由于某种原因它不能在 Wine 下运行(我怀疑与 Java 运行时有关,但这是另一天的故事) .
我考虑过使用 rsync 或符号链接来共享公共文件,但它看起来很俗气,如果某些白痴更改源模块旧版本的文件日期,也可能会造成麻烦。目前,我们有太多的个人存储库和重复的模块以满足我的喜好,我可以看到它在轨道上造成了麻烦。我认为这一定是一个相当普遍的问题,而且我确信有人已经以一种稳定的、独立于平台的方式处理了它,并且不假设开发人员在提交时永远不会出错。