-1

我想开源我在 GitHub 上完成的一些 Web 项目,但是有些文件包含数据库密码和我不想包含的类似内容。

我可以将git rm这些文件添加到 my.gitignore中,但这会将它们从 git 和修订控制中删除,我不想这样做。

当我将更改推送到存储库时,我怎样才能做到这一点,只包含某些文件?

4

2 回答 2

3

我通常建议人们在这种情况下使用“模板”模式。

例如,您有一些application.settings包含数据库密码、端口绑定等内容的文件。等。将该文件复制到application.settings.template并删除所有特定于站点的信息,例如密码和端点,只留下您希望成为默认设置的设置。

然后,添加application.settings到您的.gitignore. 每当您引入新设置时,您都必须调整这两个文件,但这允许其他人通过查找*.template文件非常容易地看到必须配置的内容。他们只需要复制这些并删除.template扩展名,然后根据需要对其进行自定义。

这有一些优点:

  1. 如果有人愚蠢到git reset --hard在生产环境中,部署的设置不会被破坏,因为 Git 不会跟踪实际的设置文件。
  2. 不会因为本地配置更改而阻止开发人员签出不同的分支(通常,git stash && git checkout other-branch && git stash pop如果目标分支具有与当前分支不同的设置文件,并且开发人员已对设置文件进行了本地更改,则必须这样做) .
  3. 由于忽略了实际设置文件,因此很难将其意外推送到远程存储库。

一个缺点是模板中的新/修改设置无法合并到部署的设置文件中(但如果您在生产中,您可能希望检查模板文件中的差异并手动应用它们)。git diff HEAD HEAD@{1} -- application.settings.template在拉取或签出新分支后,必须手动查看设置模板中的更改。

于 2013-08-22T22:23:23.423 回答
0

您可以使用私有托管的 git 子模块,并包含在您的主 git 存储库中

于 2013-08-22T22:22:04.907 回答