我有一个在本地网络上维护的大型私有(private)存储库。我想自动将该存储库的子树推送到该网络之外。我需要它很简单:
*任务* 有人推送到本地远程仓库 --> 一个子树被自动推送到其他仓库
我不确定这是否可以通过服务器端 Hook 来实现,因为 AFAIK 没有从裸远程推送子树这样的事情。我提出了两个想法:
post-commit-hook
并让每个用户都安装它,但这很糟糕,不是吗? Git book 明确指出 policies should be enforced on server side . 有没有一种简单的方法可以实现这样的目标?或者这是不可能的,它只是 git 滥用?
最佳答案
嗯,我有点尴尬。显然这比我想象的要容易得多。这是一个基于 @wrzasa 的仓促解决方案建议:
.
|- dir.git
|- dir
dir
做:git remote add <remote-name> <remote-address>
dir.git/hooks/post-receive
放:#! /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
可执行。见 this answer如果你想知道为什么unset GIT_DIR
是需要的。 差不多就是这样。现在每当有人推送到
dir
dir.git
下的远程(即 <subdir-in-dir>
)子树将被推送到<remote-name>
.
关于Git:有没有办法自动推送子树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46714487/