我知道其他人已经处理过,但我发现很难找到使用GIT作为包管理器来保持DEV和PROD同步的最佳实践。大多数解决方案都适用于此周期的特定部分。
答案 0 :(得分: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
如果在any / production / submodule(非递归)中收集了垃圾,阻止了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个以上级别的子模块进行全面测试。
感谢任何反馈。