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.
我在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.