我想开源我在 GitHub 上完成的一些 Web 项目,但是有些文件包含数据库密码和我不想包含的类似内容。
我可以将git rm
这些文件添加到 my.gitignore
中,但这会将它们从 git 和修订控制中删除,我不想这样做。
当我将更改推送到存储库时,我怎样才能做到这一点,只包含某些文件?
我通常建议人们在这种情况下使用“模板”模式。
例如,您有一些application.settings
包含数据库密码、端口绑定等内容的文件。等。将该文件复制到application.settings.template
并删除所有特定于站点的信息,例如密码和端点,只留下您希望成为默认设置的设置。
然后,添加application.settings
到您的.gitignore
. 每当您引入新设置时,您都必须调整这两个文件,但这允许其他人通过查找*.template
文件非常容易地看到必须配置的内容。他们只需要复制这些并删除.template
扩展名,然后根据需要对其进行自定义。
这有一些优点:
git reset --hard
在生产环境中,部署的设置不会被破坏,因为 Git 不会跟踪实际的设置文件。git stash && git checkout other-branch && git stash pop
如果目标分支具有与当前分支不同的设置文件,并且开发人员已对设置文件进行了本地更改,则必须这样做) .一个缺点是模板中的新/修改设置无法合并到部署的设置文件中(但如果您在生产中,您可能希望检查模板文件中的差异并手动应用它们)。git diff HEAD HEAD@{1} -- application.settings.template
在拉取或签出新分支后,必须手动查看设置模板中的更改。
您可以使用私有托管的 git 子模块,并包含在您的主 git 存储库中