2015-08-23 33 views

回答

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+级子模块进行测试。

任何反馈意见。