我知道这已被其他人处理过,但我发现很难找到使用GIT作为包管理器来保持DEV和PROD同步的最佳实践。大多数解决方案都适用于此周期的特定部分。DEV和生产之间的GIT子模块的最佳实践
2
A
回答
1
这是我们的环境
/dev/public_repo/.git # package-xxx
/dev/public_repo/submodule/.git # vendor-package
/production/public_repo/.git # package-xxx
/production/public_repo/submodule/.git # vendor-package
随着开发的进展跨越的部署,需要进口的变化。主动监视每个第一级子模块。我们循环在包装内的每个子模块一个git pull
:
cd /dev/public_repo/
for repo in *;
do if [ -d "$repo" ]; then
cd "$repo"
git pull
fi
done
这只拉动第一级封装。对供应商子模块的上游更改单独检查递归/嵌套子模块。我们进行任何子模块更改并将它们推送到它们各自的子模块分支。
cd /dev/public_repo/submodule/
git add .
git commit -m "Made Changes"
git push
然后,我们将更改推送到软件包存储库。
cd /dev/public_repo/
git add .
git commit -m "Upstream Changes"
git push
此时我们已准备好部署。从PRODUCTION存储库中,我们应该不更改子模块,并从包存储库中下拉状态。
cd /production/public_repo/
git pull
git submodule update --init --recursive
如果垃圾收集在任何/生产/子模块(非递归)预防fast-forward
然后我们在一个循环中运行git clean -fd
:
cd /dev/public_repo/
for repo in *;
do if [ -d "$repo" ]; then
cd "$repo"
git clean -fd
fi
done
git submodule update --init --recursive
这git status
后应该表现出一个干净的仓库,并生产包应该是最新的。
如果此时您意识到PRODUCTION已损坏,并且您需要恢复到以前的状态,那么您可以运行类似这样的操作。
cd /production/public_repo/
git reset HEAD~2
git submodule update
这会将PRODUCTION存储库重置为倒数第二次提交,然后将每个子模块同步到该提交的状态。 这还没有完全用2+级子模块进行测试。
任何反馈意见。
相关问题
- 1. Angular 4 - 模块之间的通信 - 最佳实践
- 2. 的Android生产测井最佳实践
- 3. 使用NHibernate为生产生成模式的最佳实践
- 4. Maven的模块版本 - 最佳实践
- 5. npm模块格式的最佳实践
- 6. 升级Python模块的最佳实践?
- 7. iOS最佳实践开发vs生产
- 8. NodeJS生产部署最佳实践
- 9. GIT开发/测试/生产环境最佳实践
- 10. 大规模闪存生产的最佳实践是什么?
- 11. Git安装最佳实践
- 12. 学习Git最佳实践
- 13. Git“Live Server”最佳实践
- 14. git submodule最佳实践
- 15. Git(DVCS)最佳实践
- 16. Python最佳实践导入模块
- 17. Angular2 - 模块分离 - 最佳实践
- 18. Angularjs模块宽常量最佳实践
- 19. Google App Engine和Git最佳实践
- 20. IOS错误处理最佳实践Dev
- 21. Dart开发和生产的最佳实践
- 22. 将工具和脚本部署到生产的最佳实践?
- 23. 最佳实践与Catch块
- 24. 在两个应用程序之间共享模块的最佳实践
- 25. 什么是创建ASP.NET门户和模块的最佳实践?
- 26. F#:组织类型和模块的最佳实践
- 27. 使用Mercurial和Eclipse的项目特征子模块的最佳实践?
- 28. Codeigniter中资产的最佳实践
- 29. 在ASP.NET和Silverlight 2之间共享DAL的最佳实践
- 30. 最佳实践:Facebook登录和Symfony2之间的交互