如何在不覆盖用户文件的情况下更新生产服务器?

时间:2015-04-14 05:08:36

标签: php mysql git file-upload workflow

我是网络开发的新手,我无法找到这个简单问题的答案。 我的智慧在这里结束,我们将非常感谢任何帮助!

我需要定期更新我的实时网站上的文件,但我觉得我遵循的工作流程非常低效:

  1. 我手动跟踪目录/文件是否已在我的本地主机上与生产服务器相比进行了修改
  2. 对于已修改的目录/文件,我使用FTP
  3. 替换服务器文件和更新的文件
  4. 某些目录中有用户上传的文件(例如照片),我必须格外小心,以确保我不会覆盖这些文件" live"我的localhost上使用的测试目录的目录。 (这感觉很错!)
  5. 显然,我在这里错过了一个最好的做法 - 但是尽管在网上搜索了几天我仍然无法找到答案:

    1. 我考虑过使用Git / SVN - 但它对我来说似乎没有意义,因为我是单独的开发人员而且没有多个人在使用相同的文件< / LI>
    2. Filezilla有这个有用的功能,有助于标记修改后的目录/文件 - 但这似乎不是一个理想的解决方案
    3. 我错过了什么?

      PS - 我在共享托管服务器上使用PHP,MySQL,Apache堆栈。

2 个答案:

答案 0 :(得分:2)

我建议您继续使用Git / Tortoise SVN

最好的部分是基于feature的分支。当每个分支都是新功能时,您可以随时在那里进行实验而不会干扰已经运行的功能。一旦新功能正常运行并合并到主分支,您就可以删除功能分支

除了分支和分叉外,GIT和Tortoise SVN还有很多功能。它显示了代码(+和绿色)之间的良好比较变化,用于添加,( - 和红色)用于删除。在RWD中处理CSS时,我发现非常方便

合并也变得更容易和无摩擦。解决冲突也是一个很好的知识

即使对于单独的开发人员来说,这也是值得的。单独的分支不仅适用于多个用户。您可以创建一个分支进行试验。在分支中,即使您领先于许多步骤,也可以始终切换回分支的位置。

供参考

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-preface-features.html

http://www.hongkiat.com/blog/github-overlooked-features/

答案 1 :(得分:1)

听起来您需要自动化部署过程。这在网络世界中称为。我个人使用,但还有许多其他选项,例如。就像在@pala_的评论中一样,我绝对建议使用版本控制软件,如果您最终使用连续集成服务器,这可能是必要的。

如果您认为自己想花时间自动化流程,则需要将源与用户生成的内容分开,并将其置于版本控制中。一般来说,我喜欢将用户生成的内容保存在与源文件完全不同的目录中,因此我可以在服务器更新文件时替换整个目录。

如果您使用GitHub或BitBucket等服务来托管您的代码,那么您可以选择使用可以在推送更新代码时触发持续集成服务器上的操作的webhook。

Github's documentation on webhooks

在持续集成服务器上,您可以使用rsync之类的内容来更新Web服务器中的文件。该命令看起来像这样:

rsync -avz -e ssh myproject/ user@example.com:/path/to/example.com