Git 不同服务器中的目录和工作树

Git dir and work tree in different servers

我在web开发中有这样的环境:

服务器 A

多个虚拟机(每个代表一个不同的项目)。用于部署。

服务器 B

托管每个 git 个裸存储库

本地机器

每个开发人员克隆存储库,在本地工作,然后推送回服务器 B 裸存储库。


问题是我需要在每个 VM(服务器 A)中都有工作树,但没有 git 目录。并维护服务器 B 中没有工作树的 git 目录。

每次有人 git push访问存储库时,远程 工作树(在服务器 A 中)需要更新。


我想避免什么?

我不想在我的部署服务器(服务器 A)中有一个完整的 git 目录,因为它有 SSD 磁盘,我会占用很多(非常昂贵的)space。


我的第一个方法

我的第一个方法是在服务器 B 中使用 post-update 的挂钩,这基本上使 git archive 成为 .gz 文件,并使用 scp 和 ssh 密钥,然后在服务器 A 中提取它。

PRO 是易于实施。

CON 是我将传输每个存储库文件,即使有人修改了一行。


谁能告诉我任何想法?是否可以将 GIT_WORK_TREE 设置为远程位置?我尝试通过 ssh 没有成功。

提前致谢。

您可以将工作目录检出到服务器 B 并使用 rsync 将它们传输到 VM。

最近git(如果我理解正确的话从2.3.0开始)支持自动更新服务器上的工作树(参见选项receive.denyCurrentBranch来更新),所以钩子只需要运行 rsync.