2012-10-30 45 views
3

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

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

的工作流程一般包括涉及A和A2两件事情:

  • 的代码可以在双方发生变化(即A和A2可以改变,由最初的团队和A2改变由外包团队),包括有源代码更改冲突
  • 需要保持两个项目同步。不需要让它们始终保持同步,但重要的是要有一种相对无痛的方式来做到这一点。假设有冲突需要解决时,这必须是手动过程

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

相关的问题:

  • 一个会如何使用Git管理两个版本,即有什么选择比手动合并?
  • 这是最好的设置还是有更好的选择?
  • 对于新项目,首选方法是什么(从某种意义上说 - 如果您有类似的情况,您会采取什么措施?)保持机密/特定环境的事情不受源代码控制?无论如何,这是一件好事吗?

回答

1

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

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

现在你应该没有问题与外包团队共享同一个存储库。在一个回购中管理分支与清理回收之间的交付比较容易。

1

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

我的建议是将源代码与感性数据分开。
请注意,这是一个更一般的建议,您可能希望保持这些合理的数据的安全存储和有限的访问权限。

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

在这一点上,“清理”的源代码可以与外包团队安全地共享,他们将无法访问“明智的数据”回购,但他们可能有一个类似的回购与他们自己的版本数据(即“演示”或“试用”或“非生产”路径,服务器名称,电子邮件)。
当然,如果外包团队应该在一个测试环境中测试他们的变化,我强烈认为这是一个必须具备的条件。他们正在做测试,不是吗?

这将大大降低,如果不能整体消除任何问题,并行地积极开发相同的东西2副本之间的大混乱合并。

相关问题