我在web开发中有这样的环境:
服务器多个vm(每个vm代表一个不同的项目)。它用于部署。
服务器B
托管所有git裸存储库
<<p> 本地机器/strong>每个开发人员克隆repo,在本地工作,并将其推回服务器B裸repo。
问题是,我需要有工作树在每个VM(服务器A),但没有git目录。在b服务器上维护没有工作树的git目录
每次某人git push
访问存储库时,远程工作树(在服务器a中)需要更新。
我要避免什么?
我不希望在我的部署服务器(服务器a)上有一个完整的git目录,因为它有SSD磁盘,我会占用很多(非常昂贵的)空间。
我的第一个方法
我的第一种方法是在服务器B中使用后更新的钩子,这基本上使git archive
成为.gz
文件,并使用ssh密钥scp
,然后在服务器a中提取它。
优点是易于实现。
CON是我将传输每个存储库文件,即使有人修改了一行。
谁能给我点主意吗?是否可以将GIT_WORK_TREE设置为远程位置?我通过ssh尝试了,没有成功。
您可以将工作目录签出到服务器B,并使用rsync将它们传输到虚拟机。
最近的git(如果我理解正确的话,从2.3.0开始)支持自动更新服务器上的工作树(参见选项receive.denyCurrentBranch到updateInstead),所以钩子只需要运行rsync。