Git 在不公开凭据的情况下开发开源的好方法?

Git 在不公开凭据的情况下开发开源的好方法?,git,github,open-source,publish,credentials,Git,Github,Open Source,Publish,Credentials,我开发了一个web应用程序,并将其源代码推送到公共Github存储库。问题是PHP代码包含其他人不应该看到的数据库凭据 现在我正在寻找一个好办法来处理这个问题。我可以使用.gitignore从Git存储库中排除配置文件,但是其他人看不到创建自己配置的结构。另一方面,我不想手动替换每次提交的真实凭据 在开源软件的源代码中处理这些敏感信息的好方法是什么?在这些情况下,我通常做的是允许使用两层配置,其中默认的属性集是版本化的,并与源代码一起提交,但是开发人员可以提供一个外部文件,如果发现该文件,将使用

我开发了一个web应用程序,并将其源代码推送到公共Github存储库。问题是PHP代码包含其他人不应该看到的数据库凭据

现在我正在寻找一个好办法来处理这个问题。我可以使用
.gitignore
从Git存储库中排除配置文件,但是其他人看不到创建自己配置的结构。另一方面,我不想手动替换每次提交的真实凭据


在开源软件的源代码中处理这些敏感信息的好方法是什么?

在这些情况下,我通常做的是允许使用两层配置,其中默认的属性集是版本化的,并与源代码一起提交,但是开发人员可以提供一个外部文件,如果发现该文件,将使用该文件,并将根据每个设置替换默认值。这不仅对外部化凭证很有用,而且还允许您使用默认值,如线程数、连接池大小等。。如果需要,可以将其覆盖。重要的是,他们总能看到完整的结构。您将拥有自己的外部覆盖文件,其中包含您使用的真实凭据。但默认值是您签入的假值

我知道您使用的是PHP,以java为例,大致如下:

Properties defaultProps = loadDefaults();
Properties overrideProps = loadOverridesIfFound();
for(String name : overrideProps.keySet()) {
   defaultProperties.put(name,overrideProps.get(name));
}

我发现这种技术对许多项目都非常有效。

在这些情况下,我通常会做的是允许两层配置,其中默认的属性集是版本化的,并与源代码一起提交,但是开发人员可以提供一个外部文件,如果发现了,将使用该文件,并将根据每个设置替换默认值。这不仅对外部化凭证很有用,而且还允许您使用默认值,如线程数、连接池大小等。。如果需要,可以将其覆盖。重要的是,他们总能看到完整的结构。您将拥有自己的外部覆盖文件,其中包含您使用的真实凭据。但默认值是您签入的假值

我知道您使用的是PHP,以java为例,大致如下:

Properties defaultProps = loadDefaults();
Properties overrideProps = loadOverridesIfFound();
for(String name : overrideProps.keySet()) {
   defaultProperties.put(name,overrideProps.get(name));
}

我发现这种技术对许多项目都非常有效。

您可以简单地
.git忽略实际的配置文件,并添加一个带有后缀
(configDefault.php)
的空副本。这也为您提供了一种方法,确保用户在运行应用程序之前确实检查了配置。

您可以简单地
.gitignore
实际的配置文件,并添加一个带有后缀
(configDefault.php)
的空副本。这也为您提供了一种方法,确保用户在运行应用程序之前确实检查了配置。

config.php实际上被忽略了,所以它被跟踪的唯一未被推送的东西是configDefault.php,它甚至没有被实际的代码读取。config.php实际上被忽略了,所以它被跟踪的唯一从未被推送的东西是configDefault.php跟踪的是configDefault.php,它甚至不被实际代码读取。