0

这可能是一个相当初级的问题,但我并不是 100% 熟悉最佳 Git 实践。我正在开发一个将定期推送更新的网络应用程序。我的本地机器上有文件,这是我进行大部分编辑/开发的地方。我有一个删除测试服务器,我在开发过程中将文件推送到该服务器。

然后我有一个实时远程生产服务器,其中包含实时应用程序。除了一个例外,所有文件都是相同的(期望测试服务器上的新功能)。我有一个 config.php 文件,其中包含各种设置,例如数据库连接设置、路径、API 密钥等。

.gitignore在两台远程服务器上都添加了一个文件,告诉 Git 忽略 config.php 文件。如果我对其进行任何添加,我可以稍后手动覆盖它。

我根据需要将文件上传到测试服务器,一旦一切正常,我将文件从 github(存储所有内容)拉到实时服务器以启动文件。

这听起来对吗?我是否遗漏了什么或做错了什么。感谢您的帮助。

4

1 回答 1

0

对于您的config.php文件问题,请查看此方法,而不是将其从您的 VCS 中排除。

if ($_SERVER['SERVER_ADDR'] === 'test-machine-ip') {
    // config here
    $config = array(); 
} else {
    // production or other config, you get the idea 
    $config = array(); 
}

关于测试/直播服务器的更新;如果你有一个独立的服务器,你提到的方法应该没问题,否则你应该实现 git hooks 以根据你推送到的特定分支进行自动更新,例如testingproduction.

钩子将允许您进行类似于此的过程:

  1. 推送到远程源(BitBucket 等)
  2. BitBucket 有一个钩子设置,POST向服务器提交数据(分支名称等)
  3. 您的脚本将根据提交数据读取提交并采取相应措施。

此方法仅适用于生产服务器,同时仍将另一种方法用于测试服务器,通常只有一个盒子。您在网上找到的大多数小脚本都不具备分支检测功能。

这里有一些资源可以帮助您入门

请注意,这些方法在自动部署的完成方式上有所不同。

如果您有一些生产服务器等,此方法很有用,并且还消除了通过 SSH 连接到服务器以执行拉取的麻烦(尽管您可以为此编写脚本)。

于 2013-10-03T23:16:53.903 回答