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

Php 如何在不覆盖用户文件的情况下更新生产服务器?,php,mysql,git,file-upload,workflow,continuous-integration,jenkins,travis-ci,Php,Mysql,Git,File Upload,Workflow,Continuous Integration,Jenkins,Travis Ci,我是网络开发新手,我找不到这个简单问题的答案我在这里束手无策,任何帮助都将不胜感激 我需要定期更新live网站上的文件,但我觉得我遵循的工作流程效率很低: 我手动跟踪本地主机相对于生产服务器是否修改了目录/文件 对于已修改的目录/文件,我使用FTP将服务器文件替换为已更新的文件 有些目录中有用户上传的文件(如照片),我必须格外小心,以确保不会用本地主机上使用的测试目录覆盖这些“活动”目录。(这感觉太不对了!) 显然,我在这里错过了一个最佳实践——但尽管在网上搜索了几天,我还是找不到答案: 我曾考

我是网络开发新手,我找不到这个简单问题的答案我在这里束手无策,任何帮助都将不胜感激

我需要定期更新live网站上的文件,但我觉得我遵循的工作流程效率很低:

  • 我手动跟踪本地主机相对于生产服务器是否修改了目录/文件
  • 对于已修改的目录/文件,我使用FTP将服务器文件替换为已更新的文件
  • 有些目录中有用户上传的文件(如照片),我必须格外小心,以确保不会用本地主机上使用的测试目录覆盖这些“活动”目录。(这感觉太不对了!)
  • 显然,我在这里错过了一个最佳实践——但尽管在网上搜索了几天,我还是找不到答案:

  • 我曾考虑过使用Git/SVN,但这对我来说似乎没有意义,因为我是一名独立的开发人员,没有多人处理同一个文件
  • Filezilla有这个有用的特性,可以帮助标记修改过的目录/文件,但这似乎不是一个理想的解决方案
  • 我错过了什么


    PS-我正在共享主机服务器上使用PHP、MySQL和Apache堆栈。

    我建议您还是选择Git/Tortoise SVN

    最好的部分是基于
    特性的分支。当每个分支都是一个新特性时,您可以始终在那里进行试验,而不会干扰已经工作的特性。一旦新要素具备功能并合并到主分支,则可以删除该要素分支

    除了分支和分叉之外,GIT和Tortoise SVN中还有很多特性。它显示了代码(+和绿色)对于added、(-和红色)对于remove之间的比较变化。我发现在RWD中处理CSS时非常方便

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

    即使对于一个单独的开发人员来说,它也是值得的。单独的分支不仅适用于多个用户。您可以创建一个用于实验的分支。在分支中,即使您走在许多步骤的前面,也可以切换回分支的起点

    供参考


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

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

    如果您使用GitHub或BitBucket之类的服务托管代码,那么您可以选择使用Webhook,当您推送更新的代码时,这些Webhook可以触发持续集成服务器上的操作

    在持续集成服务器上,您可以使用rsync之类的工具来更新Web服务器中的文件。该命令将如下所示:


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

    不作为单独的开发人员使用源代码管理是没有意义的。这不仅仅是为了解决冲突。想回到3天前用斧头攻击的文件版本吗?易于源代码控制。PITA没有它,比如@pala_uu说,如果你是一个单独的开发者,这不是问题。。使用GIT/SVN,您可以跟踪您的代码。。。所以使用它…:)这也能帮助我避免文件覆盖问题吗?同样为了方便起见,只需将您的用户文件存储在版本控制之外的目录中,并将该目录添加到您使用的任何源代码控制方法都要忽略的内容列表中。再次感谢pala和sgt!非常感谢@MySQLRockstar!我来看看乌龟:)