我们的团队结构如下:
- 将 Git 与 Bitbucket 的中央存储结合使用;
- 使用开发远程服务器 (Debian),其中包含来自主域 (project.example.com) 的“开发”分支的所有代码;
- 每个开发人员在服务器上都有自己的实例(实际上它是文档根目录中的一个子文件夹,带有指向不可更改的 CMF 核心文件的符号)和他自己的子域 (dev01.project.example.com)。
我们需要的是跟踪每个开发人员在远程实例中的所有本地代码库更改。
第一个最明显的解决方案是为此使用 Git - 在开发服务器上创建一个远程存储库,并将更改从本地实例“推送”到远程实例。但这是最糟糕的解决方案,因为开发人员必须为每个更改创建提交(包括调试消息和所有修复某些错误输出的尝试),这将用 大量无用的提交填充 Git 的日志,因此开发人员将失去本地存储库的所有优势 + 将不得不花费大量时间清理日志,然后再将他们的更改推送到 Bitbucket。
第二个选项 - 本地服务器。但这也带来了问题,因为在我们的结构中我们都使用单个数据库,所以它会带来更多的复杂性复制远程数据库并将其与本地更改合并过于频繁。此外,在本地工作站(基于 Windows)上难以复制开发环境。我个人不喜欢在每台机器上安装本地服务器的想法,因为工作站用于代码生产,而服务器用于在真实环境中进行代码工作。
第三个选项 - FTP 同步。我们都在使用 phpStorm,它可以选择通过 FTP 进行远程同步。当您更改代码并按 Ctrl+S 时,它就像一个魅力一样有效——您所做的所有更改都会立即出现在远程实例上。但是,如果您通过 Git 拉取远程代码,则需要通过 FTP将本地文件与远程文件同步 - 这运行太慢(在我们的例子中为 15-20 分钟),因为 phpStorm 会比较所有文件的内容(目前我们的项目中有 ~3k php 文件)。当然,我们可以按大小进行比较,但这是不可信的解决方案。
第四种解决方案 - Samba。我们也试过了。对于两个子解决方案,它并不比 FTP 快多少:
- 将本地文件与位于安装的 Samba 驱动器中的文件同步;
- 直接在安装的驱动器上工作
第二个更糟糕,因为我们有互联网连接问题,之后 phpStorm 永远挂起...
我也在寻找现有的解决方案,但我发现的大多数东西都是同步实用程序,比如 unison ,它必须手动运行,实际上,它不是我要找的东西 - 我不需要同步,而是复制实用程序,它监视一些本地文件夹并推送每个更改的文件(甚至更好- delta) 到远程位置,无需开发人员交互。
因此,开发人员的工作流程必须尽可能简单:
- IDE 中的 Ctrl+S 复制到远程;
- git pull 在远程复制;
- git checkout 在远程复制;
- 等等...
类似 Dropbox 的东西,但可以同步任何文件夹 + 从复制中排除一些子文件夹,并且只能单向工作:本地 -> 远程。哪些工具可以满足我们的需求?
最佳答案
又花了一天时间尝试失败后,终于找到了一个满足我需求的工具:RealSync 它并不完美,但它的工作非常好。所以,我可以为有同样问题的任何人提供建议。
更新 19.08.13 最后我找到了最佳解决方案:我们切换到 PhpStorm IDE,并且有一个部署 功能,它允许您配置部署服务器、映射部署路径、忽略一些文件和文件夹来自同步等。但这里最有用的选项位于设置中:部署 -> 选项 -> 将更改的文件自动上传到默认服务器(始终)+ 上传外部更改
这种组合使得放弃 RealSync 并从 IDE native 使用同步成为可能。
关于linux - 从本地工作站到远程服务器的代码库复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14990834/