我在Web开发中具有以下环境:
服务器A
多个VM(每个VM代表一个不同的项目)。用于部署。
服务器B
托管每个git裸存储库
本地机器
每个开发人员都会克隆该存储库,在本地工作,然后将其推送回服务器B的裸存储库。
问题是我需要在每个VM(服务器A)中都有一个工作树,但是没有git目录。并在服务器B中维护git目录且没有任何工作树。
每当有人git push
进入存储库时,(服务器A中的)远程工作树都需要更新。
我要避免什么?
我不希望在我的部署服务器(服务器A)中有完整的git目录,因为它具有SSD磁盘,并且会占用很多(非常昂贵的)空间。
我的第一种方法
我的第一种方法是在服务器B中使用挂钩进行后期更新,该挂钩基本上是git archive
对.gz
文件进行制作,并scp
与ssh密钥一起使用,然后将其提取到服务器A中。
PRO的优点是易于实现。
缺点是,即使有人修改了一行,我也将传输每个存储库文件。
有人可以给我任何想法吗?是否可以将GIT_WORK_TREE设置为远程位置?我尝试通过ssh失败。
提前致谢。
您可以将工作目录检出到服务器B,然后使用rsync将其传输到VM。
最近的git(如果我理解正确,则自2.3.0起)支持服务器上工作树的自动更新(请参阅选项receive.denyCurrentBranch为updateInstead),因此该挂钩仅需要运行rsync。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句