我们的团队有以下结构:
- 在 Bitbucket 中使用带有中央存储的 Git;
- 使用开发远程服务器 (Debian),其中包含来自主域 (project.example.com) 的“开发”分支的所有代码;
- 每个开发人员在服务器上都有自己的实例(实际上它是文档根目录中的一个子文件夹,其符号链接到 CMF 的不可更改的核心文件)和他自己的子域 (dev01.project.example.com)。
我们需要的是跟踪每个开发人员在远程实例中的所有本地代码库更改。
第一个最明显的解决方案是为此使用Git - 在开发服务器上创建一个远程存储库(-ies)并将更改从本地实例“推送”到远程实例。但这是最糟糕的解决方案,因为开发人员必须为每一个更改创建提交(包括调试消息和所有尝试修复某些错误输出),这将使 Git 的日志充满大量无用的提交,因此开发人员将失去所有本地存储库的好处 +在将更改推送到 Bitbucket 之前,必须花费大量时间清理日志。
第二种选择——本地服务器。但这也带来了问题,因为在我们的结构中,我们都使用单个 db,因此它会带来更多的复杂性,即复制远程 db 并将其与本地更改过于频繁地合并。此外,在本地工作站(基于 Windows)上复制开发环境也很困难。而且我个人不喜欢在每台机器上安装本地服务器的想法,因为工作站用于代码生产,而服务器用于代码在真实环境中工作。
第三个选项 - FTP 同步。我们都在使用 phpStorm,它可以选择通过 FTP 进行远程同步。当您更改代码并按 Ctrl+S 时,它就像一个魅力一样起作用 - 您所做的所有更改都会立即显示在远程实例上。但是,如果您通过 Git 拉取远程代码,则需要通过 FTP将本地文件与远程文件同步- 这运行速度太慢(在我们的例子中为 15-20 分钟),因为 phpStorm 会比较所有文件的内容(我们有 ~目前我们项目中有 3k 个 php 文件)。当然,我们可以按大小进行比较,但这是不可靠的解决方案。
第四种解决方案——Samba。我们也试过了。它并不比带有两个子解决方案的 FTP 快多少:
- 将本地文件与安装在 Samba 驱动器中的本地文件同步;
- 直接在已安装的驱动器上工作
第二个更糟糕,因为我们遇到了互联网连接问题,并且 phpStorm 在那之后永远挂起......
我也在寻找现有的解决方案,但是我发现的大多数东西都是同步实用程序,例如unison,它必须手动运行,实际上,它不是我要寻找的 - 我不需要同步,而是复制实用程序,它监视一些本地文件夹并将每个更改的文件(甚至更好 - 增量)推送到远程位置,而无需开发人员的交互。
因此,开发人员的工作流程必须尽可能简单:
- IDE 中的 Ctrl+S 在远程复制;
- git pull 在远程复制;
- git checkout 在远程复制;
- 等等...
像 Dropbox 之类的东西,但可以同步任何文件夹 + 从复制中排除一些子文件夹,并且只能单向工作:本地 -> 远程。哪些工具可以满足我们的需求?