Git: 有没有办法自动推送子树?

Git: is there a way to auto push a subtree?

我有一个在本地网络上维护的大型私有存储库。我想自动将该存储库的子树推送到该网络之外。我需要它很简单:

*Task* 有人推送到本地远程仓库 --> 子树自动推送到其他仓库

我不确定这是否可以通过服务器端挂钩实现,因为 AFAIK 没有从裸远程推送 子树 这样的东西。我想到了两个想法:

有没有一种简单的方法可以实现这样的目标?或者这是不可能的,只是 git 滥用?

嗯,我有点不好意思。显然这比我想象的要容易得多。这是一个基于 @wrzasa 建议的草率解决方案:

  1. 在您要推送到的服务器上克隆您的存储库,就像这样(dir.git 是一个裸存储库):

    .
    |- dir.git
    |- dir
    
  2. dir中做:git remote add <remote-name> <remote-address>

  3. 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 可执行。如果您想知道为什么需要 unset GIT_DIR,请参阅 this answer

差不多就这些了。现在每当有人推送到 dir 远程(即 dir.git)时,<subdir-in-dir> 下的子树将被推送到 <remote-name>.