我经常发现自己在 Git 中更改项目中的单个变量,以便在开发分支上连接到不同的服务器(在 JavaScript 中,所以我不能使用预处理器定义)。
Git 中是否有某种方法可以根据我所在的分支有条件地使用一个文件或另一个文件?
我不能只使用指定的不同 URL 提交该更改,因为这样做会把它留在我的提交历史中,如果我稍后在 merge 后回到 Master 上的那个版本,它将拥有开发服务器网址。
最佳答案
不,没有,但这是一个很好解决的问题。
您有几个选择:
版本控制示例配置文件
- 不要在版本控制中存储特定于环境的数据
- 创建一个
config.example
文件,其中列出了所有需要指定的配置选项,并为开发提供合理的默认值。 - 克隆你的 repo 的用户应该将
config.example
复制到真实的配置文件名,并添加真实的值 - 将真实配置文件的名称添加到
.gitignore
。 - 将您的生产凭证存储在 git 之外,但进行备份,
- 作为奖励,您可以添加一个
setup.sh
脚本,它将config.example
复制到真实配置的位置,并使用本地环境的变量填充它
例如,您可能有一个 JavaScript 应用程序需要知道它的数据库在哪里,并从 config/database.json
中读取此信息。你可能会使用这样的东西:
// config/database.example.json
DATABASE = {
"host": "localhost",
"user": "#TODO",
"pass": "#TODO",
}
要在开发中运行,您可以将此文件复制到 config/database.json
,并填写适合您的开发环境的值。
在生产环境中,您会有一个包含生产值但不受版本控制的config/database.json
。
repo 将在其 .gitignore
中包含 config/database.json
。
版本控制环境特定的配置文件
- 存储 X 个不同的配置文件,每个环境一个,将它们命名为
config.development
和config.production
等 - 为您的环境建立正确的符号链接(symbolic link)。
- 将符号链接(symbolic link)添加到 .gitignore
如果您的配置文件中有任何远程敏感信息,例如 AWS key 或任何形式的密码,您应该使用第一个选项 - 存储配置选项的名称,但不存储其值,并且要求用户提供他们自己的凭据,这些凭据是通过版本控制之外的安全 channel 获得的。
关于git - 在 Git 中使用条件配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498844/