我有一个很大的私人存储库,它在本地网络上维护。我想在该网络之外自动推送该存储库的子树。我需要它很简单:
*任务* 有人推送到本地远程存储库 - >子树会自动推送到其他存储库
我不确定这是否可以通过服务器端钩子实现,因为AFAIK没有从裸遥控器推送子树这样的事情。我提出了两个想法:
post-commit-hook
并让每个用户安装它,但这很糟糕,不是吗? Git书特别指出policies should be enforced on server side。有没有一种简单的方法来实现这样的目标?或者这是不可能的,它只是git滥用?
答案 0 :(得分:1)
在你推送的服务器上克隆你的存储库,就像这样(dir.git是一个简单的回购):
.
|- dir.git
|- dir
在dir
执行:git remote add <remote-name> <remote-address>
在dir.git/hooks/post-receive
put:
#! /bin/bash
unset GIT_DIR
cd ../dir
git pull ../dir.git
git subtree split --prefix=<subdir-in-dir> --branch=<branch-name>
git push <remote-name> <branch-name>
请记住使post-receive
可执行。如果您想知道为什么需要unset GIT_DIR
,请参阅this answer。
这就是它。现在,只要有人推送到dir
dir.git
下的<subdir-in-dir>
子树,就会被推送到<remote-name>
。