在 Web 开发团队中使用 1 个远程开发服务器且没有本地开发环境的 Git


git in a web development team using 1 remote dev server and no local dev environment

我在一家网络机构工作,有一个小团队(5名开发人员,2名设计师)。我们主要使用PHP/MySQL Web应用程序,包括Magento,Experession Engine和CakePHP。我们使用Windows 7 PC(开发人员)和OSX(设计师)上的Mac的组合。

我一直在研究在我们的项目中使用 github,有 3 个主要目标:

  1. 查看谁编辑了文件并允许他人对文件发表评论。

  2. 为了避免相互覆盖,有时多个人可以尝试同时处理同一个文件。

  3. 允许回滚到文件的先前版本。

这是我们当前的工作流程,我完全不明白 github 如何适应这一点。我意识到我们的工作流程需要改变,但我无法找到一个似乎以任何方式适合这一点的过程:

  1. 我们所有的工作都是在专门用于开发的远程Web服务器上完成的(这里没有"实时"内容)。服务器正在运行Apache,PHP,MySQL等。没有人在他们的机器上设置本地开发环境,如果可能的话,我们不希望这样。

  2. 我们都可以通过FTP访问上述开发服务器。我们通常直接在此开发服务器上编辑文件,因为它提供了一种非常快速的方法来测试内容(字面意思是编辑文件,上传并在浏览器中运行)。存在冲突问题,例如多人尝试编辑同一个文件,这就是我考虑使用 git 的原因。

  3. 当所有内容在开发服务器上获得批准后,通过将其复制到其他服务器来使其生效。实时服务器可以在任何地方 - 我们使用我们自己管理的一些服务器,有时我们使用第三方托管公司 - 它各不相同。

在过去的几天里,我一直在研究这个问题,我发现的所有方法对我们来说似乎都无法使用。有没有人对实现这一目标的最佳方法有任何见解?还是我正在研究甚至不适用于我试图解决的问题的东西?

我将不胜感激人们可以提供的任何有用的建议。

谢谢。

在我工作的公司里,我们有一个非常相似的设置。我们实际上在开发服务器上有一个不同的沙箱。换句话说,我们将存储库克隆到不同的沙箱中。每个开发人员/设计人员都有一个沙盒。例如,如果有 3 个开发人员,将有 3 个沙盒目录 + 1 个暂存目录

因此,开发人员 john 得到/home/john/example.com 并且可以在 john.example.hot (设置 vhosts) 上查看。Mike 获取/home/mike/example.com 查看于 mike.example.comTracy 获取/home/tracy/example.com 查看于 tracy.example.com并且将有一个额外的暂存目录。/首页/登台/示例.com staging.example.com

暂存将所有更改合并在一起,以便可以对其进行测试。所有这些目录只能通过内部 IPS 访问。

我们使用 RSYNC 将这些更改部署到生产环境。有关 RSYNC: http://www.cyberciti.biz/tips/linux-use-rsync-transfer-mirror-files-directories.html 的更多信息

你可以在测试机器上创建一个 git 仓库,并让你的每个团队使用 git 将他们的更改推送到该仓库。这样,当他们的更改与其他人的更改发生冲突时,他们将收到通知。

典型的工作流可能如下所示:

  1. 开发人员 1 在他的机器上更改了一些东西。
  2. Designer1 更改了他机器上的一些文件
  3. Designer1 将这些更改提交到他的本地 git 存储库
  4. Developer1 将这些更改提交到他的本地 git 存储库
  5. 开发人员 1 将他的更改推送到开发计算机。
  6. Designer1 将他的更改推送到开发机器
    1. 如果与 Developer1 的更改发生冲突,现在将提示他这些冲突是什么,并且必须解决它们。
    2. 然后,已解决的更改将被推送到开发计算机。

这应该可以解决您的问题 1.)和 3.)并将制作 2.)显式操作,这意味着您的开发人员和设计人员将看到他们正在重写的内容。如果更改同时发生在文件的不同部分,则 git 可能能够保留这两个更改而无需进一步交互。

但请注意,这仍然存在问题,没有人会在没有其他人干扰的情况下测试自己的更改,因为当有人试图测试某些内容时,这些更改可能随时更改内容。只有 1 台开发机器,您无法仅使用 git 阻止这种情况发生。由于您的团队相当小,并且您当前的方法也无法解决此问题,因此对您来说可能意义不大。