在一个Web开发团队中使用1个远程开发服务器和没有本地开发环境的情况下如何使用Git?

7
我在一家小型团队的网络代理公司工作(5名开发人员,2名设计师)。我们主要使用PHP/MySQL Web应用程序,包括Magento、Experession Engine和CakePHP。我们使用Windows 7 PC(开发人员)和Mac的OSX(设计师)的组合。
我一直在研究如何使用GitHub实现以下3个主要目标:
1. 查看谁编辑了文件,并允许人们对文件进行评论。 2. 避免覆盖彼此的工作,因为有时多个人可能同时尝试在同一个文件上工作。 3. 允许回滚到文件的以前版本。
这是我们当前的工作流程,我完全不明白GitHub如何与之配合。我意识到我们的工作流程需要改变,但我还没有找到任何适合这种情况的过程:
1. 我们所有的工作都在远程Web服务器上完成,该服务器专门用于开发(没有“实时”内容)。该服务器运行Apache、PHP、MySQL等。没有人在自己的计算机上设置本地开发环境,如果可能的话,我们也不想这样做。 2. 我们所有人都可以访问上述开发服务器的FTP。通常我们直接在该开发服务器上编辑文件,因为这样可以非常快速地测试(只需编辑文件,上传并在浏览器中运行即可)。存在冲突问题,例如多个人尝试编辑同一文件,这就是我正在研究使用Git的原因。 3. 当所有东西在开发服务器上得到批准后,我们会将其复制到另一个服务器上进行实时运行。实时服务器可以在任何地方——我们使用一些自己管理的服务器,有时我们使用第三方托管公司——这是不确定的。
我已经研究了几天,但我找到的所有方法似乎都无法使用。有没有人对实现此目标的最佳方式有任何见解?或者我正在寻找根本不适用于我要解决的问题的东西?
如果有人能提供有用的建议,我将不胜感激。
谢谢。

你是否已经熟悉 Git 并且只需要一些一般性的建议,还是你是 Git 的新手? - FlyingFoX
1
出于好奇,为什么你不想在开发者的机器上拥有本地开发环境? - pjmorse
1
本地开发环境对我们来说不起作用。考虑Magento,它依赖于MySQL数据库。我们的开发服务器防火墙不允许人们远程连接到那里的数据库,我们也不希望人们运行自己的本地数据库副本,这些副本很快就会失去同步。还有设置7个不同的开发机器可能具有不同的配置/路径问题,我们不想要。我们已经拥有的开发服务器可以存储和运行我们正在努力工作的脚本,所以我认为没有必要拥有本地开发环境。 - Andy F
@AndyF 这就是Vagrant数据库迁移的用途。 - ceejayoz
@ceejayooz 外部网络服务需要公共IP才能进行异步响应。这只是需要远程开发框的另一个例子。Vagrant并不能解决这个问题。事实上,Vagrant在很大程度上与原始问题所涉及的“远程”开发环境类似 - 只是比AWS中的某些东西“更接近”您的本地机器,但它是YACS(另一种可配置堆栈)。但遗憾的是,它不是公开可访问的。是的,这很重要,而且在至少一些开发场景中,这是一个无法接受的问题。 - ekeyser
显示剩余2条评论
2个回答

1
我们公司的设置非常类似。实际上,在开发服务器上有不同的沙盒。换句话说,我们将repo克隆到不同的沙盒中。每个开发人员/设计师都有一个沙盒。例如,如果有3个开发人员,则会有3个沙盒目录+1个暂存目录。
所以,开发人员John得到/home/john/example.com,并且可以在john.example.hot上查看(设置虚拟主机)。 Mike得到/home/mike/example.com,并且可以在mike.example.com上查看。 Tracy得到/home/tracy/example.com,并且可以在tracy.example.com上查看。 还有一个额外的暂存目录。/home/staging/example.com staging.example.com
暂存会将所有更改合并在一起进行测试。所有这些目录只能通过内部IPS访问。
我们使用RSYNC将这些更改部署到生产环境。关于RSYNC的更多信息,请参见此处:http://www.cyberciti.biz/tips/linux-use-rsync-transfer-mirror-files-directories.html

对我们来说,不同之处在于我们的开发人员将编辑存储在本地计算机上的文件副本。我们没有为每个开发人员在Web服务器上设置“主目录”。您提供的方法是我在许多其他教程中找到的,但我认为这依赖于用户在相同的开发服务器上的自己的目录中工作/编辑文件。这在我们的设置中并非如此,因此很遗憾我们无法使用此方法。 - Andy F
明白了。祝你安装顺利。 - Nilesh Shukla
@AndyF,我不理解你对这个答案的回应。你正在寻求关于良好工作流程的想法,因为你的工作流程现在无法正常工作。然后当一个好的想法被提出时,你基本上只是说你不是那样做的。当然你不是那样做的,否则你就不需要一个新的工作流程了。为什么不在开发系统上为不同的用户设置单独的主目录,并将不同的Web地址指向它们?这比在每个开发人员的计算机上设置单独的PHP、Apache和MySQL安装要简单得多。 - still_dreaming_1
此外,这与git非常配合。每个开发人员都可以使用自己的用户帐户ssh登录到dev服务器。在托管官方开发版本的目录中可以有一个中央裸git存储库,将每个人的工作组合起来,并且是您最终发布到生产服务器的内容。然后对于每个用户/开发人员,您将该存储库克隆到其文件系统中。然后他们只需更改自己的文件并在其测试URL上进行测试即可。他们可以向中央存储库推送和拉取。 - still_dreaming_1
通过这种方法,您仍然可以使用SFTP(或FTP,如果您更喜欢)从FTP程序查看和编辑文件。它还可以让您选择在终端上直接在服务器上运行Vim或不同的终端文本编辑器,如果您通过SSH登录。 - still_dreaming_1
显示剩余2条评论

0
你可以在测试机上创建一个git仓库,并让团队中的每个人使用git将他们的更改推送到该仓库。这样,当他们的更改与其他人的更改冲突时,他们就会收到通知。
典型的工作流程可能如下:
1. Developer1 在他的机器上更改了一些内容。 2. Designer1 在他的机器上更改了一些文件。 3. Designer1 将这些更改提交到他的本地git仓库。 4. Developer1 将这些更改提交到他的本地git仓库。 5. Developer1 将他的更改推送到开发机器。 6. Designer1 将他的更改推送到开发机器 - 如果与Developer1的更改发生冲突,Designer1现在将被提示这些冲突是什么,并需要解决它们。 - 然后,已解决的更改将被推送到开发机器。
这应该解决你的问题1和3,并使问题2成为一个明确的操作,这意味着你的开发人员和设计师将看到他们正在覆盖什么。如果在同一时间对文件的不同部分进行更改,则git可能能够保留两个更改而无需进一步交互。

但是要注意的是,这仍然存在一个问题,即没有人能够在其他人干扰的情况下测试自己的更改,因为在某人尝试测试某些内容时,其他人可能随时更改事物。只有1台开发机器,您无法仅使用git防止这种情况发生。由于您的团队规模较小,当前的方法也无法解决这个问题,因此对您来说可能意义不大。


根据已经给出的答案,我认为问题在于我们的团队会在本地编辑文件,但是为了运行/预览他们的工作,它必须放在 /var/www/vhosts/dev.domain/httpdocs/ 中,而这对于每个开发人员来说都是相同的目录(因为他们没有本地开发环境,这是他们可以运行和预览他们的工作的唯一位置)。上面的帖子听起来很合理,但我不禁想到它仍然可能导致工作被覆盖或“Designer1”使用过时的文件副本(除非他碰巧在Developer1推送后拉取?) - Andy F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接