背景资料
我们正在努力从使用 SVN 转向 GIT,我们主要在 magento 商店上工作,并为每个项目配备一个登台服务器和生产服务器。
简单来说这个过程:代码首先在本地机器上开发,在每台开发机器上设置项目,然后将其提交到暂存仓库并由客户和 QA 测试,然后掌握它进入生产和最终测试的位置质量保证。
我们使用 codebase/github 存储库,部署到登台是使用 deployhq 自动进行的,从 master 到生产的部署是由系统管理员使用 deployhq 完成的。
GIT 工作流程是在受到 Internet 上建议的不同工作流程的影响后派生的,并使用了http://nvie.com/posts/a-successful-git-branching-model/和正确使用 Git/GitHub 的方法 - PHP具有开发/测试/生产服务器以及其他服务器的系统,但还包括我认为与此模型一致的命令。
GIT 工作流程
0]在本地建立新的GIT项目
- git clone [path_to_repo] -b [branch_name] [local_dir]
- path_to_repo 可以是远程存储库或分支包 (repo.bundle)
1]在捆绑导入的情况下设置远程路径
- git 远程设置 URL 来源 [path_to_repo]
- path_to_repo 是远程存储库
2]根据分配的任务创建一个新的功能分支。
- git checkout -b [branch_name] // 创建新分支并切换到它
- git push origin [branch_name]
3]所有更改在本地分支本地完成并定期推送到远程分支(分批,而不是单个更改!)如果有人想在同一个分支上工作,他需要从同一个远程分支而不是从主分支中提取数据。
- 日常生活
- git checkout [branch_name] // 切换到分支
- git pull // 从远程拉取最新的更改(例如在我们开始工作之前的早上)
- 对文件进行更改
- 混帐添加。或 git add [folder] // 准备要提交的文件列表或文件/文件夹
- git commit // 提交修改到本地分支
- git pull // 在一天结束时预推送同步以了解任何冲突
- git push // 在一天结束时将更改推送到远程分支
4]一旦远程/本地分支中的更改生效并需要在暂存服务器上进行审查,本地分支将被合并到远程暂存分支中。
- git checkout staging // 如果已经存在切换到它
- git 合并 [remote_branch_to_merge_to_master]
- git 推送
5]如果客户端确认远程分支工作正常并准备部署到实时服务器,则合并到主服务器
- 合并到主
- git checkout [master_branch_name] // 切换到 master
- git pull 原点/主
- git merge [remote_branch_name_to_merge_to_master] // 合并到 master
- git 推送
Master to Production 由系统管理员通过 deployhq 手动完成。
Q] 是否应该有另一个基于 master 的分支生产,并且只从 master 获取立即生效的更改,即始终是最稳定的代码,或者这是多余的。
我们正在寻找有关减少步骤数量的建议,以及工作流程是否与 GIT 中的最佳实践(包括其中提到的命令)一致。