2

假设有一个遗留 Java 项目 A。无论出于何种原因,该项目中都有一些机密的东西(例如密码、加密密钥、电子邮件)和/或特定于环境的东西(例如硬编码路径、服务器名称、电子邮件)。由于涉及的复杂性,似乎不可能将项目更改为不包含源代码中的信息。

在某个时候,一个新的外包团队加入了开发。鉴于上述情况,外包团队无法逐字访问项目源代码。他们有一个单独的开发环境,因此可以在他们的 VCS 中制作一个单独的项目副本,以解决问题(即所有需要的东西都被清理/更新,以便在他们的环境中工作)。我们称该版本为 A2。

工作流程通常包括与 A 和 A2 相关的两件事:

  • 代码两边都可以改(即A和A2都可以改,A由原团队改,A2由外包团队改),包括有源代码变更冲突
  • 有必要使这两个项目保持同步。不需要让它们一直保持同步,但重要的是要有一种相对轻松的方式来做到这一点。假设当有冲突需要解决时,这必须是一个手动过程

这个工作流程可以通过手动保留两个项目并在它们之间合并来实现。

相关问题:

  • 如何使用 git 管理这两个版本,即与手动合并相比有哪些选项?
  • 这是最好的设置还是有更好的选择?
  • 对于新项目,将机密/特定于环境的事情排除在源代码控制之外的首选方式是什么(从某种意义上说——如果你有类似的情况,你会怎么做?)无论如何,这是一件好事吗?
4

2 回答 2

1

这种方法会给你带来痛苦。您需要做的是使用git filter-branch消除服务器名称、密码并用非工作的通用形式替换 - 即,它不应该在任何地方运行!

接下来,设置涂抹/清理脚本以更改包含该信息的文件,以将值填充为您的解决方案仅在该本地系统上运行所需的值。与您的开发环境相比,您的生产环境中会有不同的参数。关键是要抽象出这些信息。

现在,与外包团队共享同一个存储库应该没有问题。在一个 repo 中管理分支与在 repo 之间清理提交要容易得多。

于 2012-10-30T17:27:41.240 回答
0

@icyrock.com:这似乎是一场灾难的秘诀。

我的建议是将源代码与敏感数据分开。
请注意,这是一个更一般的建议,您可能希望安全地存储敏感数据并限制访问。

步骤:
1. 从源代码中删除所有敏感数据,
2. 创建一个包含该敏感数据的新 git 存储库
3. 从原始源代码中引用敏感数据(这取决于编程语言,Java 不是我的专业领域)

此时,“清理”的源代码可以安全地与外包团队共享,他们将无法访问“敏感数据”存储库,但他们可能有一个类似的存储库,其中包含他们自己版本的敏感数据(即“演示”或“试用”或“非生产”路径、服务器名称、电子邮件)。
当然,如果外包团队应该能够在测试环境中测试他们的更改,则需要上述内容,我强烈认为这是必须的。他们在做测试,不是吗?

这将大大减少(如果不能从整体上消除)与正在并行积极开发的相同内容的 2 个副本之间的大混乱合并相关的任何问题。

于 2017-02-24T11:50:33.530 回答